我有一个问题,其中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;需要触发这种情况。
答案 0 :(得分:1)
如果我直接调用this-&gt; foo(x),两个编译器都会接受它,但我知道谁是对的。
考虑到它在gcc 5.2中编译,clang在你的特定情况下是正确的。看起来它只是gcc 5.1中的一个错误。 gcc 6.0也编译了这个罚款。
另外,从直觉上讲,this
应该暗示。