【一人 C++20 Advent Calendar 2019】typeid が constexpr に対応【17日目】
一人 C++20 Advent Calendar 2019 17日目の記事になります。
typeid が constexpr に対応
昨日書いた dynamic_cast が constexpr に対応したのに合わせて type_id
も constexpr
に対応しました。
#include <typeinfo> #include <iostream> struct A { virtual void dummy() {} }; struct B { virtual void dummy() {} }; int main(){ constexpr A a1{}; constexpr A a2{}; constexpr B b{}; // OK constexpr std::type_info const& typeA1 = typeid(a1); constexpr std::type_info const& typeA2 = typeid(A); constexpr std::type_info const& typeB = typeid(b); constexpr A* p = 0; // NG: std::bad_typeid が投げられる場合はコンパイルエラー constexpr std::type_info const& nurupo = typeid(*p); return 0; }
ただし、 std::type_info
のメンバ関数は constexpr
には対応してない(しない?)ぽいので次のようなコードはエラーになります。
(少なくとも wandbox の clang-head
gcc-head
でエラーだった)
// エラー static_assert(typeid(a1) == typeid(A)); static_assert(typeid(a1).hash_code() == typeid(A).hash_code());
これって C++20 だとどうなるんですかね…?
メンバ関数が constexpr
でないと結局使えなさそうな気がするんですがさて。