プログラミング言語C++において、コンパイル時にある変数の宣言型を判定する方法あれこれ。
// 型名T と 変数名val // C++11以降 #include <type_traits> static_assert(std::is_same<T, decltype(val)>::value, ""); // C++17以降 #include <type_traits> static_assert(std::is_same_v<T, decltype(val)>); // C++20以降 #include <concepts> static_assert(std::same_as<T, decltype(val)>); // C++2b(C++23)以降 #include <typeinfo> static_assert(typeid(T) == typeid(val));
ノート:typeid演算子ではトップレベルのCV修飾と参照修飾が無視されるため(→id:yohhoy:20121122)、型情報の厳密一致を判定するstd::is_same
やstd::same_as
とは挙動が微妙に異なることに注意。
関連URL