我正在尝试比较 constexpr-if 语句中的函数参数。
这是一个简单的例子:
constexpr bool test_int(const int i) {
if constexpr(i == 5) { return true; }
else { return false; }
}
但是,当我使用带有以下标志的 GCC 7 编译它时:
g++-7 -std=c++1z test.cpp -o test
我收到以下错误消息:
test.cpp: In function 'constexpr bool test_int(int)':
test.cpp:3:21: error: 'i' is not a constant expression
if constexpr(i == 5) { return true; }
但是,如果我test_int
用不同的功能替换:
constexpr bool test_int_no_if(const int i) { return (i == 5); }
然后下面的代码编译没有错误:
int main() {
constexpr int i = 5;
static_assert(test_int_no_if(i));
return 0;
}
我不明白为什么 constexpr-if 版本无法编译,特别是因为 static_assert 工作得很好。
对此的任何建议将不胜感激。
谢谢!