lang无法识别lambda中的基类

时间:2018-08-29 10:40:50

标签: c++ lambda compiler-errors clang derived-class

我具有以下结构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):

  • 3.6:error: type 'Base' is not a direct or virtual base of 'Derived'(请参见上面的代码中的problematic line
  • 3.7及更高版本:编译(带有有关未使用表达式的警告)

因此,我希望使用新版本就可以了。但是,当我尝试在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 ++?

0 个答案:

没有答案