allow out-of-class defaulting of comparison operators
authorrobert <robert@openbsd.org>
Sun, 26 Mar 2023 09:09:31 +0000 (09:09 +0000)
committerrobert <robert@openbsd.org>
Sun, 26 Mar 2023 09:09:31 +0000 (09:09 +0000)
commit049dee6038423fab611bd86b1db50dc65d8c4326
tree8d3b98c5368090f7eacb2645fc4b9f7b7e076a66
parent44956221150f005cd079655a4cff1a9ba60a7a1e
allow out-of-class defaulting of comparison operators

ok deraadt@, mortimer@

this is backport of the following upstream commit:

commit 5fbe21a7748f91adbd1b16c95bbfe180642320a3
Author: Nathan Sidwell <nathan@acm.org>
Date:   Wed Jun 16 10:43:43 2021 -0700

    [clang] p2085 out-of-class comparison operator defaulting

    This implements p2085, allowing out-of-class defaulting of comparison
    operators, primarily so they need not be inline, IIUC intent. this was
    mostly straigh forward, but required reimplementing
    Sema::CheckExplicitlyDefaultedComparison, as now there's a case where
    we have no a priori clue as to what class a defaulted comparison may
    be for. We have to inspect the parameter types to find out. Eg:

    class X { ... };
    bool operator==(X, X) = default;

    Thus reimplemented the parameter type checking, and added 'is this a
    friend' functionality for the above case.
gnu/llvm/clang/include/clang/Basic/DiagnosticSemaKinds.td
gnu/llvm/clang/lib/Sema/SemaDeclCXX.cpp