gpt4 book ai didi

c++ - GCC 以错误的方式解压 (I < ...) 折叠表达式

转载 作者:太空狗 更新时间:2023-10-29 20:54:53 25 4
gpt4 key购买 nike

<分区>

我打开了一个 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).

我是对的还是我遗漏了一些关于折叠表达式的重要信息?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com