https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102419
Bug ID: 102419
Summary: [concepts] [regression] return-type-requirement of
"Y<typename T::type>" does not check that T::type
actually exists
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: arthur.j.odwyer at gmail dot com
Target Milestone: ---
// https://godbolt.org/z/GWjYYnrnM
template<class, class> concept Y = true;
template<class T> concept X = requires {
{ 1 } -> Y<typename T::type>;
};
static_assert(!X<int>);
<source>:8:15: error: static assertion failed
8 | static_assert(!X<int>);
| ^~~~~~~
Clang and MSVC both appear to have the correct behavior -- or what I believe to
be the consistent/useful/majority behavior, anyway -- which is that since
T::type doesn't exist, the concept shouldn't be satisfied.
This seems to be a regression; according to Godbolt, GCC 10.3 had the correct
behavior but GCC 11.1 lost it.
I wonder if #92268 could be related somehow, since it seems to be something
like the inverse issue (nonexistent nested type causing a hard error in 10.x),
and it was marked fixed presumably somewhere in the 11.x timeframe.