我有一个问题,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 才能触发这种情况。
如果我直接调用 this->foo(x) ,两个编译器都会接受它,但我更想知道谁是对的。
考虑到它是在 gcc 5.2 中编译的,clang 在您的具体情况下是正确的。看起来这只是 gcc 5.1 中的一个错误。 gcc 6.0 也可以很好地编译。
而且它具有直观意义,this
应该是暗示的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)