• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    const修飾されたメンバポインタの制限を修正 [P0704R1]

    このページはC++20に採用された言語機能の変更を解説しています。

    のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

    概要

    C++11でメンバ関数を左辺値/右辺値修飾する機能が導入された。その際、以下の例において、同じ関数を呼び出す場合でも、メンバ関数ポインタを介した方だけが不適格となっていた:

    struct X { void foo() const&; };
    
    X{}.foo();        // OK
    (X{}.*&X::foo)(); // コンパイルエラー!
    

    これは、「.*式において、右辺値オブジェクトに対して左辺値修飾されたメンバ関数ポインタを呼び出すことは不適格となる」という仕様によるものであった。

    C++20ではこの式が許可され、仕様としては以下のようにconstメンバ関数の呼び出しを許可するようになった:

    .*式において、右辺値オブジェクトに対して左辺値修飾された非constのメンバ関数ポインタを呼び出すことは不適格となる」

    関連項目

    参照