------- Comment #2 from gcc-bugzilla at contacts dot eelis dot net  2006-05-20 
21:32 -------
But for what F and T would F<T> match foo<int>::bar ?

In looking for workarounds I found that the same problem occurs when using
partial specialization:

  template <typename> struct S {};
  template <template <typename> class T> struct S<T<int> >;
  template <typename> struct foo { struct bar {}; };
  S<foo<int>::bar> s; // error: S is incomplete

Again, Comeau accepts the code.

Finally, to show that at least *something* is wrong, consider:

  template <typename> struct S { enum { x }; };
  template <template <typename> class T> struct S<T<int> > { enum { x }; };
  template <typename> struct foo { struct bar {}; };
  int i = S<foo<int>::bar>::x; // error: x is not a member of S<foo<int>::bar>

Surely at least one of the two S versions should be selected, and both expose
x. (Again, Comeau accepts the code.)


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27689

Reply via email to