1// { dg-do assemble  }
2
3template < class T, template < class > class E1, template < class > class E2 >
4class Add {
5public:
6  Add(const E1<T>& e1, const E2<T>& e2) {}
7};
8
9template < class T >
10struct Id {
11  template < template < class > class E >
12  Add < T, ::Id, E > operator+(const E<T>& e) const {
13    return Add < T, ::Id, E >(*this, e);
14  }
15};
16
17template struct Id<double>;
18