C++0x std::conditional

C++0xには、boost::mpl::if_c相当の、コンパイル時if文(式)が入るようです。

// <type_traits>
namespace std {
  template <bool, class T, class F> struct conditional;
}

conditionalメタ関数の第1引数はコンパイル時の条件、
第2引数はtrueだった場合に返る型、第3引数はfalseだった場合に返る型です。

struct lambda_tag;
struct not_lambda_tag;

template <class T>
struct get_regular_tag {
    typedef
        typename std::conditional<
            std::is_constructible<T>::value || std::has_copy_assign<T>::value,
            not_lambda_tag,
            lambda_tag
        >::type
    type;
};