http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46105
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> 2010-10-27 20:53:14 UTC --- The error message that GCC gives is: t.cc:25:22: error: ambiguous class template instantiation for ‘struct element<const has_et>’ t.cc:12:8: error: candidates are: struct element<T, typename empty<typename T::element_type>::type> t.cc:17:8: error: struct element<const T, typename empty<typename T::element_type>::type> t.cc:25:1: error: ‘type’ in class ‘element<const has_et>’ does not name a type T is "const has_et" for the first candidate and T is has_et for the second. Maybe I am missing something here but both T's have an element_type.