14

我试过的编译器都不接受这样的代码:

template <int ...a> bool foo() { return (a<=> ... <=>0); }

但对于任何其他<=,>=,==,!=,<,>它编译。

cppreference在这里很清楚 -<=>我们可以用于折叠表达式的二元运算符列表中没有。

这是 C++ 标准中的故意遗漏,还是编译器还没有准备好?

这个问题只是纯粹的好奇。我只是想知道这个领域的 C++ 方向是什么。我可以想象所有其他比较运算符都将从允许运算符的折叠表达式列表中删除,因为它们与<=>折叠表达式一样有意义......

4

1 回答 1

17

这是故意的。

折叠扩展比较运算符的问题在于它通过以下方式工作:A < B < C < D. operator<这仅在重载以表示比较以外的其他情况时才有意义。这就是为什么试图阻止 C++17 允许您首先折叠它们的原因。

operator<=>永远应该用于比较以外的其他事情。所以是禁止的。

于 2021-08-06T15:15:16.220 回答