mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 19:06:33 +00:00
[libc++] Deprecates rel_ops. (#91642)
These operators were deprecated in P0768R1 Library Support for the Spaceship (Comparison) Operator This was discovered while investigating the paper's implementation status.
This commit is contained in:
parent
850a2e6874
commit
136737d947
@ -141,6 +141,8 @@ Deprecations and Removals
|
||||
of randomness, and others. Users that were checking whether including a header would fail (e.g. via a script
|
||||
or CMake's ``try_compile`` will experience a change in behavior).
|
||||
|
||||
- The operators in the ``rel_ops`` namespace have been deprecated. The deprecation is part of the paper
|
||||
P0768R1 "Library Support for the Spaceship (Comparison) Operator".
|
||||
|
||||
Upcoming Deprecations and Removals
|
||||
----------------------------------
|
||||
|
@ -20,22 +20,22 @@ _LIBCPP_BEGIN_NAMESPACE_STD
|
||||
namespace rel_ops {
|
||||
|
||||
template <class _Tp>
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const _Tp& __x, const _Tp& __y) {
|
||||
inline _LIBCPP_DEPRECATED_IN_CXX20 _LIBCPP_HIDE_FROM_ABI bool operator!=(const _Tp& __x, const _Tp& __y) {
|
||||
return !(__x == __y);
|
||||
}
|
||||
|
||||
template <class _Tp>
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator>(const _Tp& __x, const _Tp& __y) {
|
||||
inline _LIBCPP_DEPRECATED_IN_CXX20 _LIBCPP_HIDE_FROM_ABI bool operator>(const _Tp& __x, const _Tp& __y) {
|
||||
return __y < __x;
|
||||
}
|
||||
|
||||
template <class _Tp>
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator<=(const _Tp& __x, const _Tp& __y) {
|
||||
inline _LIBCPP_DEPRECATED_IN_CXX20 _LIBCPP_HIDE_FROM_ABI bool operator<=(const _Tp& __x, const _Tp& __y) {
|
||||
return !(__y < __x);
|
||||
}
|
||||
|
||||
template <class _Tp>
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator>=(const _Tp& __x, const _Tp& __y) {
|
||||
inline _LIBCPP_DEPRECATED_IN_CXX20 _LIBCPP_HIDE_FROM_ABI bool operator>=(const _Tp& __x, const _Tp& __y) {
|
||||
return !(__x < __y);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,35 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <utility>
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
#include <utility>
|
||||
#include <cassert>
|
||||
|
||||
struct A {
|
||||
int data_ = 0;
|
||||
};
|
||||
|
||||
inline bool operator==(const A& x, const A& y) { return x.data_ == y.data_; }
|
||||
|
||||
inline bool operator<(const A& x, const A& y) { return x.data_ < y.data_; }
|
||||
|
||||
void test() {
|
||||
using namespace std::rel_ops;
|
||||
A a1{1};
|
||||
A a2{2};
|
||||
(void)(a1 == a1);
|
||||
(void)(a1 != a2); // note not deprecated message, due to compiler generated operator.
|
||||
std::rel_ops::operator!=(a1, a2); // expected-warning {{is deprecated}}
|
||||
(void)(a1 < a2);
|
||||
(void)(a1 > a2); // expected-warning 2 {{is deprecated}}
|
||||
(void)(a1 <= a2); // expected-warning 2 {{is deprecated}}
|
||||
(void)(a1 >= a2); // expected-warning 2 {{is deprecated}}
|
||||
}
|
@ -8,6 +8,8 @@
|
||||
|
||||
// XFAIL: availability-filesystem-missing
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
|
||||
|
||||
// Make sure the various containers' iterators are not broken by the use of `std::rel_ops`.
|
||||
|
||||
#include <utility> // for std::rel_ops
|
||||
|
@ -8,6 +8,8 @@
|
||||
|
||||
// test rel_ops
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
|
||||
|
||||
#include <utility>
|
||||
#include <cassert>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user