https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95004

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Static array of base        |using the wrong pointer to
                   |classes member pointers     |member for base classes
                   |                            |with two bases
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2021-08-01
      Known to fail|                            |6.4.0

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Confirmed. To show it is not a problem with templates and just pointer to
members and not using aliases either.
Take:
struct base {
    int value1;
};
struct base0 {
    int value;
};
struct derived: base0, base {
    typedef int derived::* pointer_type ;
    static constexpr pointer_type m = &base0::value;
    static constexpr pointer_type m1 = &base::value1;
};
static_assert(derived::m == &base0::value,"");
static_assert(derived::m != &base::value1,"");
static_assert(derived::m1 != &base0::value,"");
static_assert(derived::m1 == &base::value1,"");

Basically the conversion from "int derived::*" to "int *base::" (or "int
*base0") is going wrong.

Reply via email to