ref限定符在gcc4.7.2和vc10中给出错误

Kou*_*tty 3 c++ g++ visual-studio-2010 c++11

考虑以下最小的例子.

#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;
}
Run Code Online (Sandbox Code Playgroud)

这给出了关于expecting ';' at the end of declaration和的错误and expected un-qualified-id before '{'.

我能知道我做错了什么吗?在实际的代码中我想避免通过temporaries调用非静态成员函数.

试过gcc 4.7.2和vc2010.谢谢.

And*_*owl 7

答案很简短:VC10和GCC 4.7.2不支持ref-qualifiers.

但是,请注意您的foo()函数具有左值 ref限定符,这意味着您无法在临时值上调用它.

如果您还希望编译此表达式:

A().foo();
Run Code Online (Sandbox Code Playgroud)

然后你应该使用const&或提供重载&&,如在这个实例中.

要使用ref-qualifiers,您可以使用Clang 3.2或GCC 4.8.1.

  • btw gcc 4.8.1刚刚发布,是第一个支持它们的编译器(clang 3.3将于下周发布并支持它们) (2认同)