折叠表达式中可以使用宇宙飞船运算符吗?
Can spaceship operator be used in fold expressions?
None 的编译器我 tried 接受这样的代码:
template <int ...a> bool foo() { return (a<=> ... <=>0); }
但对于任何其他 <=,>=,==,!=,<,>
它编译。
cppreference 在这里很清楚 - 在我们可用于折叠表达式的二元运算符列表中没有 <=>
。
这是 C++ 标准中的故意遗漏,还是编译器没有准备好?
这个问题纯属好奇;我只是想知道这方面的C++方向是什么。我可以想象所有其他比较运算符将从允许运算符的折叠表达式列表中删除,因为它们与折叠表达式中的 <=>
一样有意义...
这是故意的。
折叠扩展比较运算符的问题在于它通过这样做来工作:A < B < C < D
。这仅在 operator<
被超载以表示 不同于 比较的情况下才有意义。这就是为什么 an attempt was made to stop C++17 from allowing you to fold over them in the first place.
operator<=>
是 never 应该用于比较以外的其他用途。所以是禁止的。
None 的编译器我 tried 接受这样的代码:
template <int ...a> bool foo() { return (a<=> ... <=>0); }
但对于任何其他 <=,>=,==,!=,<,>
它编译。
cppreference 在这里很清楚 - 在我们可用于折叠表达式的二元运算符列表中没有 <=>
。
这是 C++ 标准中的故意遗漏,还是编译器没有准备好?
这个问题纯属好奇;我只是想知道这方面的C++方向是什么。我可以想象所有其他比较运算符将从允许运算符的折叠表达式列表中删除,因为它们与折叠表达式中的 <=>
一样有意义...
这是故意的。
折叠扩展比较运算符的问题在于它通过这样做来工作:A < B < C < D
。这仅在 operator<
被超载以表示 不同于 比较的情况下才有意义。这就是为什么 an attempt was made to stop C++17 from allowing you to fold over them in the first place.
operator<=>
是 never 应该用于比较以外的其他用途。所以是禁止的。