从lambda中调用基本成员函数时出错

时间:2013-11-08 02:39:38

标签: c++ gcc

我正在尝试在lambda中调用成员函数的基类实现。

以下代码是 clang ++ 接受而 gcc 是否拒绝标准格式?

#include <iostream>

class Base
{
protected:
    void fn() { }
};

class Derived
    : public Base
{
public:
    void fn()
    {
        [&]() {
            Base::fn(); /// compilation error here
        }();
    }
};

int main()
{
    Derived d;
    d.fn();
}

错误讯息:

test.cpp: In lambda function:
test.cpp:6:10: error: void Base::fn() is protected
     void fn() { }
          ^
test.cpp:16:22: error: within this context
             Base::fn();
                      ^

编译器版本:

  

gcc版本4.8.1(Ubuntu / Linaro 4.8.1-10ubuntu8)

Ubuntu clang version 3.3-5ubuntu4 (branches/release_33) (based on LLVM 3.3)

1 个答案:

答案 0 :(得分:3)

这是gcc中的错误。 lambda就像定义本地类并具有相同的访问权限。