読者です 読者をやめる 読者になる 読者になる

とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

type_traits入門 std::true_type, std::false_type

C++0x から入った を少しずつ紹介しようというコーナー。
基本的にコンパイル時に使うので static_assert のテストコードを見て理解してね,という方向で。今のところ GCC 4.6.0 でテストしてる。

std::true_type, std::false_type

単体では使いどころなさそうだけど type_traits ライブラリの基礎になってるメタ関数。true_type は true を返し,false_type は false を返す。これから紹介する is_〜 系のメタ関数は true を返す場合に true_type から派生し,false を返す場合に false_type から派生する。
(std::is_same は T 型と U 型が同じ場合に true を返すメタ関数。::value で値を取得できる。このメタ関数は後で紹介する予定。)

#include<type_traits>

// true_type
static_assert(std::true_type::value == true, "::value");
static_assert(std::is_same<std::true_type::value_type, bool>::value, "::value_type");
static_assert(std::is_same<std::true_type::type, std::true_type>::value, "::type");
constexpr bool test1 = std::true_type(); // constexpr operator bool()
static_assert(test1 == true, "");

// false_type
static_assert(std::false_type::value == false, "::value");
static_assert(std::is_same<std::false_type::value_type, bool>::value, "::value_type");
static_assert(std::is_same<std::false_type::type, std::false_type>::value, "::type");
constexpr bool test2 = std::false_type(); // constexpr operator bool()
static_assert(test2 == false, "");

int main(){}