https://gcc.gnu.org/g:f4b96998f1c1aa22c70462d018f8a3d4a8ec214a

commit r16-3438-gf4b96998f1c1aa22c70462d018f8a3d4a8ec214a
Author: Tomasz Kamiński <tkami...@redhat.com>
Date:   Thu Aug 28 15:48:03 2025 +0200

    libstdc++: Test comparing ordering with type convertible to any pointer.
    
    libstdc++-v3/ChangeLog:
    
            * testsuite/18_support/comparisons/categories/zero_neg.cc: New test.
    
    Reviewed-by: Jonathan Wakely <jwak...@redhat.com>
    Signed-off-by: Tomasz Kamiński <tkami...@redhat.com>

Diff:
---
 .../18_support/comparisons/categories/zero_neg.cc        | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git 
a/libstdc++-v3/testsuite/18_support/comparisons/categories/zero_neg.cc 
b/libstdc++-v3/testsuite/18_support/comparisons/categories/zero_neg.cc
index 2e6b9c14ddbe..ce0ca8efa6f5 100644
--- a/libstdc++-v3/testsuite/18_support/comparisons/categories/zero_neg.cc
+++ b/libstdc++-v3/testsuite/18_support/comparisons/categories/zero_neg.cc
@@ -23,6 +23,16 @@
 // C++20 [cmp.categories.pre]
 // "an argument other than a literal 0 is undefined"
 
+struct PtrConv
+{
+  template<typename T>
+  consteval operator T*()
+  { return nullptr; }
+
+  consteval operator std::nullptr_t()
+  { return nullptr; }
+};
+
 void
 test01()
 {
@@ -48,6 +58,12 @@ test01()
   std::partial_ordering::equivalent == nullptr;
   std::weak_ordering::equivalent == nullptr;
   std::strong_ordering::equivalent == nullptr;
+
+  constexpr PtrConv c;
+  // requires two user-defined conversion
+  std::partial_ordering::equivalent == c; // { dg-error "no match for 
'operator=='" }
+  std::weak_ordering::equivalent == c;    // { dg-error "no match for 
'operator=='" }
+  std::strong_ordering::equivalent == c;  // { dg-error "no match for 
'operator=='" }
 }
 
 // { dg-prune-output "reinterpret_cast.* is not a constant expression" }

Reply via email to