I have some code that is structured like so:
enum class Type {a,b, c, d};
template<typename T>
class External {
public:
External(Type t) {
}
};
template<typename T>
class Base {};
template<typename T>
class Derived : Base<T> {
public:
private:
External<int> e(Type::a);
};
int main() {
Derived<int> der;
return 0;
}
When compiled with g++, this gives the following error:
<source>:49:25: error: 'Type::a' is not a type
49 | External<int> e(Type::a);
| ^~~~
Through some experimentation I found out that it works if I construct the object of type External
differently:
template<typename T>
class Derived : Base<T> {
public:
private:
External<int> e = External<int>(Type::a);
};
Why is that the case? Why does the compiler expect a type in the first case?
Aucun commentaire:
Enregistrer un commentaire