https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71784
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|ice-on-invalid-code | CC| |jakub at gcc dot gnu.org, | |jason at gcc dot gnu.org Target Milestone|6.2 |4.9.4 Summary|[6/7 Regression] ICE on |[4.9/5/6/7 Regression] ICE |invalid code in |on invalid code in |push_access_scope, at |push_access_scope, at |cp/pt.c:229 |cp/pt.c:229 --- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> --- template<typename T> struct A { template<typename U> void f(U const&) &; template<typename U> void f(U const&) &&; }; template<typename T> template<typename U> void A<T>::f(U const& x) & {} template<typename T> template<typename U> void A<T>::f(U const& x) && {} template class A<int>; template void A<int>::f<int>(int const&) &; template void A<float>::f<int>(int const&) &&; int main(){ A<int> a; a.f<int>(2); A<float>().f<int>(1); } ICEs starting with r198843, before it has been rejected (with -std=c++0x), and indeed this (unlike your #c0) is accepted by clang++ 3.8.