[Bug c++/116011] accepting &(T::x) as a pointer to member in an unevulated context and not treating it differently from &T::x
pinskia at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Jul 20 19:44:46 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116011
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2024-07-20
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Hubert Tong from comment #8)
> (In reply to Andrew Pinski from comment #7)
> > Those are all unevulated context.that is sizeof and decltype are both
> > considered unevulated context. In them, gcc does not think &(T::x) and &T::x
> > act differently.
>
> I am not seeing how you reached the conclusion that GCC does not think
> &(T::x) and &T::x act differently.
I said outside of an unevaluated context. the uses you have are inside an
unevaluated context still.
Try this:
```
struct A { int x; };
template <typename T>
constexpr auto f() {
return &T::x;
}
template <typename T>
constexpr auto f1() {
return &(T::x);
}
auto g = f<A>();
auto g1 = f1<A>();
```
You will see GCC rejects the definition of f1<A> correctly.
More information about the Gcc-bugs
mailing list