我已经向 GCC 打开了一个错误,但我想知道我的期望是否正确。
考虑这个提议和下面的折叠表达式:
(args < ...)
它应该等同于:
((args$0 < args$1) < ...) < args$n
考虑以下代码:
#include <cassert>
int main() {
assert((0 < 42) < 3);
}
断言编译并正常工作,它不会失败(确实如预期的那样,请注意结果不是((0 < 42)和(42 < 3)),表达式本身非常不寻常且毫无意义)。
另一方面,当使用折叠表达式时:
template<int... I>
static constexpr bool f() {
return (I < ...);
}
int main() {
static_assert(f<0, 42, 3>(), "!");
}
断言在编译时失败(GCC 6.1.0)。
由于提案中包含的内容,我希望它能够编译。
它应该成功,因为它等效于上面不涉及折叠表达式的示例。
解压后的表达式确实应该是:((0 < 42) < 3)。
我是对的还是我在这里遗漏了一些关于折叠表达式的重要内容?