3

以下の最小限の例を検討してください。

#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 '{'

私が間違っていることを知ることができますか?実際のコードでは、一時的に非静的メンバー関数を呼び出すことを避けたいと考えています。

gcc 4.7.2 と vc2010 で試しました。ありがとう。

4

1 に答える 1

7

答えは短くなります: VC10 と GCC 4.7.2 は ref-qualifiers をサポートしていません。

foo()ただし、関数には左辺値参照修飾子があることに注意してください。つまり、一時的に呼び出すことはできません。

この式もコンパイルする場合:

A().foo();

次に、このライブの例const&のように、を使用するか、オーバーロードを提供する必要があります。&&

ref-qualifier を使用するには、Clang 3.2 または GCC 4.8.1 を使用できます。

于 2013-06-02T14:52:45.733 に答える