C++ clang不识别lambda中的基类
我有以下结构C++ clang不识别lambda中的基类,c++,lambda,compiler-errors,clang,derived-class,C++,Lambda,Compiler Errors,Clang,Derived Class,我有以下结构MyStruct,它在构造时调用Foo: struct MyStruct { MyStruct() { Foo<int>(); } template<typename T> void Foo() { []() { struct Base { Base(int n) {} }; struct D
MyStruct
,它在构造时调用Foo
:
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;
};
}
};
作为一种解决方法,我尝试在struct-Derived
(如图所示)中引入使用Base=Base
,这使得它可以通过XCode编译。(作为旁注:使用相同的解决方法不适用于锁销上的clang 3.6。)
下面是我的问题:
- 这是一个编译器错误吗?如果是:是否有文件记录
- 是我的工作程序<代码>使用Base= Base< /Cord>有效的,定义良好的C++( )
static_断言(std::is_base_of::value,“Not base of”)代码>在lambda函数中,编译器很好(使用godbolt,clang3.6,--std=c++1y进行测试)代码>这与您编写的typedef Base完全相同
和typedef名称相当于不带typedef
关键字的类型。换句话说,typedef(或using)之后的Base
与typedef(或using)之前的Base
完全相同。explicit
在默认构造函数explicit-Derived()中做什么?我见过explicit
用于单参数构造函数,但不用于默认构造函数,我对此很感兴趣(我的Google fu让我失望)。@Eljay See了解有关explicit
的更多信息。以我为例,它是多余的(实际上是我最初问题的遗留问题)。
error: member initializer 'Base' does not name a non-static data member or base class