<分区>
精简到最低限度,这是我要编译的代码:
template<class T>
class B
{
protected:
std::vector<typename T::I> v;
public:
template<class... Args>
void add(Args... args )
{
this->v.emplace_back(std::forward<Args>(args)...);
}
typename T::I get(int i)
{
return this->v[i];
}
};
class D : public B<D>
{
public:
typedef std::string I;
};
如果我实例化 D
并尝试在 g++
中编译它,它会提示:
error: invalid use of incomplete type ‘class D’
std::vector<typename T::I> v;
并添加注释,
note: forward declaration of ‘class D’
class D : public B<D>
如果我改用 clang++
,我会得到一个不同的错误:
error: no type named 'I' in 'D'
std::vector<typename T::I> v;
我确定我只是在做一些愚蠢的事情,但我似乎无法弄清楚。