Почему этот случай неверен (он логичен)
template <typename T>
struct Der: public Base
{
typedef int T;
T val;
};
но этот случай правильный?
struct Base
{
typedef int T;
};
template <typename T>
struct Der: public Base
{
T val;
};
В стандарте 14.6.1/7 говорится:
В определении шаблона класса или в определении члена такого шаблона, который появляется за пределами определения шаблона, для каждого базового класса, который не зависит от параметра шаблона (14.6.2), если имя базового класса или имя элемента базового класса совпадает с именем параметра шаблона, имя базового класса или имя участника скрывает имя параметра шаблона (3.3.7).
Почему здесь нет двусмысленности?