decltype(式)によって、名前や式から型(C++)を得ることができる。 ただし、結果は式の値カテゴリの影響を受け、TT&T&&のいずれかになることがある。

例えば、xint型の変数なら、decltype(x)intだが、decltype((x))int&になる。 これは、xは名前そのものとして扱われるのに対し、(x)は括弧で囲まれた式として扱われるためである。 decltypeでは、この違いが結果の型に影響する。

用途:

  • 式や名前から型を取り出す
  • 関数の戻り値型を表現する
  • 関連型を取り出す
int x{ 0 };
decltype(x) a{ 1 };   // int
decltype((x)) b{ x }; // int&
auto g(int a, int b) -> decltype(a + b)
{
    return a + b;
}
decltype(arr)::size_type i{ 0 };

参考