https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107773
Bug ID: 107773
Summary: Class members do not hide nested types
Product: gcc
Version: 11.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: eiband at mail dot de
Target Milestone: ---
The following program exits with code 1.
test.cpp:
struct a
{
using get = void;
};
struct b : a
{
int get(int i) const;
};
template <typename T>
concept c = requires { typename T::get; };
int main()
{
return c<b>;
}
$ g++ test.cpp -std=c++20
$ ./a.out
$ echo $?
1
Expected is exit code 0, because T::get is not a type for T=b.
The code snippet is based on user "apple apple"'s comment on
https://stackoverflow.com/questions/74509418/why-does-member-function-not-hide-type-alias-in-base-class-when-compiling-with-g.
User "n. m." also notes that GCC happily compiles
https://eel.is/c++draft/temp.res.general#example-4 which does not use concepts
and should emit an error.
$ g++ -v
gcc version 11.1.0 (Ubuntu 11.1.0-1ubuntu1~20.04)