考虑以下最小的例子。
#include<iostream>
struct A
{
A(){std::cout<<"def"<<'\n';}
void foo()&{std::cout<<"called on lvalue"<<'\n';}
};
int main()
{
A a;
a.foo();
A().foo();
return 0;
}
这会产生关于expecting ';' at the end of declaration
和and expected un-qualified-id before '{'
的错误。
我能知道我做错了什么吗?在实际的代码中,我想避免通过temporaries调用非静态成员函数。
尝试了gcc 4.7.2和vc2010。 感谢。
答案 0 :(得分:7)
答案很简短:VC10和GCC 4.7.2不支持ref-qualifiers。
但请注意,您的foo()
函数具有左值引用限定符,这意味着您无法在临时值上调用它。
如果你想要编译这个表达式:
A().foo();
然后您应该使用const&
,或为&&
提供重载,如此live example。
要使用ref-qualifiers,您可以使用Clang 3.2或GCC 4.8.1。