我尝试过的所有编译器都不接受这样的代码:
template <int ...a> bool foo() { return (a<=> ... <=>0); }
但对于任何其他<=,>=,==,!=,<,>
都可以编译通过。
cppreference清楚地表明,我们无法在fold表达式中使用<=>
二元运算符。
这是C++标准有意省略的,还是编译器还没有准备好?
这只是出于好奇,我只想知道C++在这个领域的方向。我可以想象,除了<=>
之外的所有比较运算符都将从允许的fold表达式运算符列表中删除,因为它们和<=>
在fold表达式中一样毫无意义...
<=,>=,==,!=,<,>
运算符,它都有效。已经有提议从折叠表达式中删除所有比较运算符,因为它们的含义非常不直观。在第一次比较之后,您将比较所有其他值与一个布尔值。 - Drew Dormannreturn (a<=> ... <=>0);
的结果应该是什么?它应该生成什么样的代码?你能提供一个有意义的<=
的工作示例吗? - Marek R<=,>=,==,!=,<,>
,它都能正常运行。我不会说它“能正常运行”,而是说它仅仅编译通过。 - Barry