https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117454
Bug ID: 117454
Summary: Template parameter hidden by base class name
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: Darrell.Wright at gmail dot com
Target Milestone: ---
There should be a warning when a template parameter name is hidden by a base
classes usage of it. e.g
```
struct Base {
int Value = 42;
};
template <auto Value>
struct Derived : Base {
int v = Value;
};
static_assert( Derived<66>{}.v == 66 );
```
Will fail to compile, the intent is clear. This happens with any name it seems
```
#include <type_traits>
struct Base {
using Type = int;
};
template <typename Type>
struct Derived : Base {
Type field;
};
static_assert( std::is_same_v<decltype(Derived<double>{}.field), double> );
```
However, if the Base is a dependent type the behaviour is reversed. The user
fix is to change the template param name, but I think compilers should have a
warning for this here as the code is probably broken