是否可以在静态vector_c上使用boost :: mpl :: contains?

时间:2016-04-07 19:52:06

标签: c++ compile-time static-assert

我正在寻找this question的一个不那么笨拙的答案,即在编译时检查模板参数是否在数字列表中。我不仅要检查函数的范围,还要检查整数在编译时是否在任意整数列表中。该答案的作者写道,当C ++ 0x出现在constexpr,static_assert和用户定义的文字中时,事情会变得容易得多,"但我没有看到完全如何。

我想使用this boost::mpl::contains函数(或其他任何函数),但它只需要一个类型作为第二个参数。

1 个答案:

答案 0 :(得分:2)

只为了它的乐趣:

template <int first, int... last>
struct int_list {
    static bool constexpr check(int c) {
      return first == c ? true : int_list<last...>::check(c);
    }
};

template <int first>
struct int_list<first> {
    static bool constexpr check(int c) { return c == first; }
};

using my_sequence = int_list<1, 5, 12, 45, 76, 60>;

static_assert(my_sequence::check(10), "No tenner");