This doesn't work:
template <typename T>
class A {
protected:
using Z = T*;
};
template <typename T>
class B : public A<T> {
public:
B(Z) {}
};
Compiler says:
test.cpp:10:7: error: unknown type name 'Z'
B(Z) {}
However this works:
template <typename T>
class A {
protected:
using Z = T*;
};
template <typename T>
class B : public A<T> {
public:
B(typename A<T>::Z) {}
};
as well as this:
template <typename T>
class A {
protected:
using Z = T*;
};
template <typename T>
class B : public A<int> {
public:
B(Z) {}
};
Why?