On 21.09.23 18:02, Thiago Macieira wrote: > On Thursday, 21 September 2023 02:10:22 PDT Ivan Solovev via Development > wrote: >> But I'd say that if someone wants to implement three-way comparison for >> their classes in C++17, then a bit better understanding of the language >> features is a reasonable expectation. > > Allowing class developers to implement the three-way comparison such that Qt > can make use of it is fine. That's basically allowing them to use the same > technique we will be using to make our classes three-way comparable. > > Providing an API for three-way comparison in C++17 does not need to happen.
Where do you draw the line between "Allowing class developers to implement the three-way comparison such that Qt can make use of it is fine." and "Providing an API for three-way comparison in C++17 does not need to happen."? A Qt class author is supposed to implement a (however named) eq(lhs, rhs) and cmp(lhs, rhs) function. These functions are then translated into - in C++17: - by our macros: - ==, != - <, >, <=, >= - ==, != (reversed) - <, >, <=, >= (reversed) - in C++20: - by our macros: - == - <=> - from these, by the compiler: - != - ==, != (reversed) - <, >, <=, >= - <, >, <=, >= (reversed) How is said Qt class author supposed to implement his cmp(lhs, rhs) if there is no "API" for doing this on his data members? As a concrete example, how is the author of a `struct QFoo { int; QString; }` supposed to implement his cmp() if all he gets is op<=>, a C++20-only API? I don't see how we can manage without an API for doing three-way comparisons in C++17. We can try without (4), but (1)-(3) must needs be "semi-public" API (not in _p.h's). Thanks, Marc -- Marc Mutz <marc.m...@qt.io> Principal Software Engineer The Qt Company Erich-Thilo-Str. 10 12489 Berlin, Germany www.qt.io Geschäftsführer: Mika Pälsi, Juha Varelius, Jouni Lintunen Sitz der Gesellschaft: Berlin, Registergericht: Amtsgericht Charlottenburg, HRB 144331 B -- Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development