<分区>
我打开了一个 bug到 GCC,但我想知道我的期望是否正确。
考虑 this提案和以下折叠表达式:
(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>(), "!");
}
断言fails在编译时 (GCC 6.1.0)。
由于提案中包含的内容,我希望它能够编译。
它应该成功,因为它等同于上面不涉及折叠表达式的示例。
解压后的表达式确实应该是:((0 < 42) < 3).
我是对的还是我遗漏了一些关于折叠表达式的重要信息?