論理演算

あると便利だと思うのですが、C++0xにはありません。

#include <type_traits>

// and
template <class ...Fs>
struct and_ : std::true_type {};

template <class F1, class ...Fs>
struct and_<F1, Fs...>
  : std::conditional<F1::value, and_<Fs...>, std::false_type>::type
{};

// or
template <class ...Fs>
struct or_ : std::false_type {};

template <class F1, class ...Fs>
struct or_<F1, Fs...>
  : std::conditional<F1::value, std::true_type, or_<Fs...>>::type
{};

// not
template <class F>
struct not_ : std::integral_constant<bool, !F::value> {};

短絡評価されるところがミソですね。