On 22/07/2020 17:39, Andrey Semashev via Boost wrote:
On 2020-07-22 19:25, Niall Douglas via Boost wrote:
So Peter, seeing as you're the closest person to an expert in C++ 20 operator rewriting that I know of (and there is absolutely nothing about this on the internet),
FWIW, I found this article helpful to understand the new operators behavior:
https://brevzin.github.io/c++/2019/07/28/comparisons-cpp20/
TL;DR version is in the summary:
https://brevzin.github.io/c++/2019/07/28/comparisons-cpp20/#summary-of-rules
That was very useful. It turns out that for operator== only, C++ 20 will auto reverse it. So, in Outcome, I need to disable free function reversed operator== only, for C++ 20 and later. I must leave free function reversed operator!= alone. Now all we need is for clang to stop claiming C++ 17 when it's in C++ 20. I understand clang 11 will be the first to do this. Until then, Boost.Outcome can never be 100% green in the Boost test suite. (Apart from MSVC that is. They have a long standing instability bug in two phase lookup where depending on random chance, either MSVC discovers ADL injected hooks, or it doesn't, per compilation. They know about the bug, and there is no estimate for when it will be fixed. This is why in the Boost regression suite, the hooks test randomly flips from passed to fail all the time for MSVC) Thanks everybody for your help. Niall