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

时间:2013-06-02 14:52:03

标签: c++ visual-studio-2010 c++11 g++

考虑以下最小的例子。

#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 declarationand expected un-qualified-id before '{'的错误。

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

尝试了gcc 4.7.2和vc2010。 感谢。

1 个答案:

答案 0 :(得分:7)

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

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

如果你想要编译这个表达式:

A().foo();

然后您应该使用const&,或为&&提供重载,如此live example

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