我具有以下结构MyStruct
,该结构在构造时调用Foo<int>
:
struct MyStruct {
MyStruct() {
Foo<int>();
}
template<typename T>
void Foo() {
[]() {
struct Base {
Base(int n) {}
};
struct Derived : Base {
// using Base=Base; // needs to be uncommented for Apple LLVM version 9.1.0 (clang-902.0.39.2)
Derived() :
Base(0) // problematic line
{}
} derived;
};
}
};
我试图用clang编译它(通过godbolt,命令行参数--std=c++1y
):
error: type 'Base' is not a direct or virtual base of 'Derived'
(请参见上面的代码中的problematic line
)因此,我希望使用新版本就可以了。但是,当我尝试在Mac上使用XCode9(其中according to this使用clang 4.0(clang --version
给出Apple LLVM version 9.1.0 (clang-902.0.39.2)
)进行编译时,我从发出的同一行中得到了一个错误由clang 3.6:
error: member initializer 'Base' does not name a non-static data member or base class
作为一种变通方法,我尝试在using Base=Base
中引入struct Derived
(如所示),这使其可以通过XCode进行编译。 (作为一个旁注:对godbolt上的clang 3.6使用相同的解决方法无效。)
这是我的问题:
using Base=Base
是否有效,定义明确的C ++?