0

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?

eepp
  • 7,255
  • 1
  • 38
  • 56

0 Answers0