我有一些看起来像这样的代码
#include <array>
constexpr std::size_t N = 16;
template<typename Array>
constexpr void takeparam(Array& data, size_t I) {
if (I < N - 2) { // <- fails if I add constexpr
data[I] = data[I + 2];
}
}
template<size_t I, typename Array>
constexpr void taketemplate(Array& data) {
if constexpr (I < N - 2) { // <- here constexpr is OK
data[I] = data[I + 2];
}
}
int main() {
std::array<int, 16> data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
takeparam(data, 3);
taketemplate<3>(data);
}
我期待能够if constexpr
在 takeparam 函数中使用,但我无法让它工作。我究竟做错了什么?