このページはC++14に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
概要
戻り値の型を後置する関数宣言構文とラムダ式の、後置戻り値型(trailing return type)をauto
プレースホルダーとし、そのプレースホルダーを修飾することで、戻り値型の推論を補助できる。
static int static_value = 3;
// 関数宣言構文の場合:
// 戻り値の型はint&。
// return文をdecltypeで推論した結果はintとなり、
// その型を参照(&)で修飾している。
auto f() -> auto& { return static_value; }
// ラムダ式の場合:
// 関数オブジェクトgの戻り値型もまたint&
auto g = []() -> auto& { return static_value; };
例
static int static_value = 3;
// 戻り値の型はint&。
// return文をdecltypeで推論した結果はintとなり、
// その型を参照(&)で修飾している。
auto f() -> auto& { return static_value; }
int main()
{
// 関数オブジェクトgの戻り値型もまたint&
auto g = []() -> auto& { return static_value; };
int& result_f = f();
int& result_g = g();
}
出力
この機能が必要になった背景・経緯
この機能は、C++14で導入された「通常関数の戻り値型推論」の機能において、ラムダ式から参照の戻り値を返すことを目的として導入された。