В этом примере:
template<class T>
struct S : T
{
using T::X;
};
T::X
- это зависимое имя, которое относится к члену X
в T
. Если S<T>
создается с T = X
:
struct X
{
X(int) {}
};
...
S<X> s(42);
Станет ли объявление-использование конструктором-наследником?
Clang отклоняет код DEMO, а g ++ принимает его.
Обратите внимание, что если мы напишем:
using T::X::X;
Оба компилятора принимают код и рассматривают его как конструктор-наследник. Разрешено ли using T::X
стать конструктором-наследником по стандарту?