yohhoyの日記

技術的メモをしていきたい日記

変数型のコンパイル時判定

プログラミング言語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_samestd::same_asとは挙動が微妙に異なることに注意。

関連URL