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.