【发布时间】:2021-10-11 10:57:09
【问题描述】:
我tried 的编译器都不接受这样的代码:
template <int ...a> bool foo() { return (a<=> ... <=>0); }
但对于任何其他<=,>=,==,!=,<,>,它都会编译。
cppreference 在这里很清楚 - 我们可用于折叠表达式的二元运算符列表中没有 <=>。
这是 C++ 标准中的故意遗漏,还是编译器没有准备好?
这个问题只是纯粹的好奇;我只是想知道这个领域的 C++ 方向是什么。我可以想象所有其他比较运算符都将从允许运算符的折叠表达式列表中删除,因为它们在折叠表达式中与 <=> 一样有意义......
【问题讨论】:
-
"但是对于任何其他
<=,>=,==,!=,<,>它都有效。" It has been proposed 将 all 比较运算符从折叠表达式中删除,因为它们的含义非常不直观。在第一次比较之后,您需要将所有其他值与bool进行比较。 -
我想知道:
return (a<=> ... <=>0);的结果应该是什么?它应该生成什么样的代码?您能否为<=提供有意义的工作示例? -
“但对于任何其他
<=,>=,==,!=,<,>,它有效。”我不会说它有效,我会说它只是编译。
标签: c++ language-lawyer c++20 fold-expression spaceship-operator