【发布时间】:2023-03-18 23:45:02
【问题描述】:
template<class Derived>
class Base{
public:
using dType = typename Derived::Type; //1
void interface(){
using dType = typename Derived::Type; //2
}
};
template<typename T>
class Derived:public Base<Derived<T>>{
public:
using Type = T;
};
int main(){
Base<Derived<int>>{};
return 0;
}
当我在 (1) 中使用“使用”语法时,出现类似
的错误test.cpp: In instantiation of 'class Derived<int>':
test.cpp:14:9: required from 'class Base<Derived<int> >'
test.cpp:31:21: required from here
test.cpp:23:7: error: invalid use of incomplete type 'class Base<Derived<int> >'
23 | class Derived:public Base<Derived<T>>{
| ^~~~~~~
test.cpp:12:7: note: declaration of 'class Base<Derived<int> >'
12 | class Base{
|
但是,当我在(2)中使用它时,我没有错误。 它们有什么区别?
【问题讨论】:
-
似乎与您是否在complete-class context 中有关。不知道最好的解释在哪里。