- cpp20[meta cpp]
このページはC++20に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
C++14で導入されたジェネリックラムダと同様に、通常の関数もパラメータ型をauto
にすることで、簡易的に関数テンプレートを定義できるようにする。
パラメータ型をauto
としたそれぞれのパラメータに対して、個別にテンプレートパラメータが割り振られる。
制限としては、以下のようなものがある:
- パラメータ型に
decltype(auto)
は使用できない std::vector<auto>
のように型の一部をauto
にはできない
auto
で定義した変数の型をとりたい場合は、decltype
を使用する。
#include <iostream>
auto f(auto a, auto b) { return a + b; }
// 以下と同じ意味になる:
// template <class T, class U>
// auto f(T a, U b) { return a + b; }
int main()
{
// パラメータaとbの型はint
std::cout << f(1, 2) << std::endl;
// パラメータaとbの型はdouble
std::cout << f(0.1, 0.2) << std::endl;
}
3
0.3