http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50864
Paolo Carlini <paolo.carlini at oracle dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|ice-on-invalid-code |ice-on-valid-code Status|WAITING |NEW CC| |jason at gcc dot gnu.org Summary|SFINAE bug |[4.6/4.7 Regression] ICE | |with decltype and "declval" | |from another namespace --- Comment #6 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-10-25 17:04:41 UTC --- Ok, this way at least part of the issue is more clear: the below doesn't parse, remove the impl namespace and it works: ///////////////// namespace impl { template <class T> T create(); } template < class lhs, class rhs > struct is_arrow_operable_impl { template <class T, class U, class = decltype(impl::create<T>() -> impl::create<U>())> void test(); };