Tag Archives: is_same

テンプレートのvariadic引数で型をチェックする

普通の型チェック

Tがポインタだとエラーになる。

variadicの場合

最初の引数の型Tに対してチェックしている。CheckKataに渡される引数がwchar_t*だったりポインタのポインタだったらエラーになる。ただwchar_tはセーフにしている。

remove_cvなどの挙動がいまいちよくわからないのでこの書き方であっているのか不明。以下のようなコードで実行時の型を表示してくれる。

is_sameは渡された2つの型が同じならtrue
decayは配列参照などをポインタにしてくれる。
remove_cvconstvolatileを除去
remove_pointerはポインタを1つ除去する。

_vで終わるのはvalue,is_same::valueなどと同じ。
_tで終わるのはtype,remove_cv::typeなどと同じ。

ソース:https://github.com/ambiesoft/blogprogs/tree/master/6006/ConsoleApplication1

static_assertで型チェック

is_sameで同じ型かどうかを判定する。
declspecで式から型を得る。
invoke_resultで関数の戻り値の型を得る。

ソース:https://github.com/ambiesoft/blogprogs/tree/master/5775/static_assert_type_check