is_sameで同じ型かどうかを判定する。
declspecで式から型を得る。
invoke_resultで関数の戻り値の型を得る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <type_traits> #include <cstdint> static constexpr int64_t g = 1234; double ddd() { return 1.234; } int ccc(char c) { return c + 3; } int main() { auto val = false; // check val is bool static_assert(std::is_same<decltype(val), bool>::value, "retval must be bool"); int i = 100; static_assert(std::is_same<decltype(i * g), int64_t>::value, "i * g must be int64_t"); // invoke_result needs C++ 17 static_assert(std::is_same<std::invoke_result<decltype(ddd)>::type, double>::value, "ddd must return double"); // invoke_result needs C++ 17 static_assert(std::is_same<std::invoke_result<decltype(ccc), char>::type, int>::value, "ccc must return int"); } |
ソース:https://github.com/ambiesoft/blogprogs/tree/master/5775/static_assert_type_check