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.