在通用lambda捕获中使用this指针

时间:2015-07-28 10:06:52

标签: c++ lambda c++14

我有一个问题,其中Clang(3.6)和G ++(5.1)有不同的意见:

#include <functional>

struct X
{
    X()
    {
        std::function<void (int)> f = [this](auto x){foo(x);};
    }

    void foo(int x){}
};

int main(){}

Clang接受这个,而G ++声明:

error: cannot call member function ‘void X::foo(int)’ without object

如果我直接拨打this->foo(x),两个编制者都会接受,但我宁愿知道谁是对的。

注意:lambda签名中的“auto”和转换为std :: function&lt;&gt;需要触发这种情况。

1 个答案:

答案 0 :(得分:1)

  

如果我直接调用this-&gt; foo(x),两个编译器都会接受它,但我知道谁是对的。

考虑到它在gcc 5.2中编译,clang在你的特定情况下是正确的。看起来它只是gcc 5.1中的一个错误。 gcc 6.0也编译了这个罚款。

另外,从直觉上讲,this应该暗示。