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.

Reply via email to