http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53651
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ice-on-invalid-code Status|UNCONFIRMED |NEW Last reconfirmed| |2012-06-13 Known to work| |4.6.3 Summary|seg fault when specifying |[4.7/4.8 Regression] |using decltype(...)::method |[C++11] seg fault when | |specifying using | |decltype(...)::method Ever Confirmed|0 |1 Known to fail| |4.7.0, 4.8.0 --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-06-13 10:01:11 UTC --- The code is has about a dozen errors, the one that causes the ICE is that the decltype-specifier is a reference not a class, and you can't derive from a reference. Reduced: template<typename> struct wrap { void bar(); }; template<typename T> auto foo(T* t) -> wrap<T>* { return 0; } template<typename T> struct holder : decltype(*foo((T*)0)) { using decltype(*foo((T*)0))::bar; }; holder<int> h; This is a regression because 4.6.3 doesn't ICE, although the diagnostic isn't very helpful in telling you the decltype-specifier is a reference type: s2.cc:8:11: error: expected nested-name-specifier before ‘decltype’ s2.cc:8:11: error: expected unqualified-id before ‘decltype’ s2.cc:8:11: error: expected ‘;’ before ‘decltype’ s2.cc:8:34: error: invalid use of ‘::’