c++14引入的黑魔法,std::index_sequence,通过结合std::make_index_sequence进行生成编译期间的数字序列,使用例子如下:
template <size_t ...N>
static constexpr auto square_ns(size_t index, std::index_sequence<N...>) {
constexpr auto nums = std::array{N * N ...};
return nums[index];
}
template <size_t N>
constexpr static auto const_ns(size_t index) {
return square_ns(index, std::make_index_sequence<N>{});
}
int main() {
static_assert(const_ns<101>(20) == 19 * 19);
}