https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85739
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2018-05-11 CC| |jakub at gcc dot gnu.org, | |jason at gcc dot gnu.org Target Milestone|--- |8.2 Summary|internal compiler error: in |[8/9 Regression] internal |finish_member_declaration, |compiler error: in |at cp/semantics.c:3057 |finish_member_declaration, | |at cp/semantics.c:3057 Ever confirmed|0 |1 --- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- You don't really need the include, typedef __PTRDIFF_TYPE__ ptrdiff_t; template <typename a, int a::*> class b {}; template <typename a, const int a::*> class B { using e = ptrdiff_t; }; template <typename a, int a::*i, const int a::*n> bool operator!=(B<a, n>, b<a, i>); class l; template <typename a, int a::*i> class m { public: using o = B<l, i>; using iterator = b<l, i>; }; class l { public: int f; }; template <typename g, int g::*h> class F { public: using j = m<l, h>; using o = typename j::o; using iterator = typename j::iterator; o begin() const; }; class p { bool k() const; F<l, &l::f>::iterator c; F<l, &l::f> d; }; bool p::k() const { if (d.begin() != c) return true; return false; } reproduces it too. Started with r254843.