1
Clang是否正确拒绝仅通过专门化定义类模板的嵌套类的代码?
给定以下类模板: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; 我们Inner为以下每种专业分别定义Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; 然后f针对以下所有专业定义一次成员函数Outer: auto Outer<T>::f(Inner) -> void { } 但是Clang(9.0.0)抱怨: error: variable has incomplete type 'Outer::Inner' auto Outer<T>::f(Inner) -> void ^ 我们还可以通过提供Inner以下所有其他专长的定义来规避编译器错误Outer: template<typename T> struct Outer<T>::Inner {}; 或通过f为每个专业分别定义: template<> auto …