[libcxx] adds concept `std::common_reference_with`
Implements parts of:
- P0898R3 Standard Library Concepts
- P1754 Rename concepts to standard_case for C++20, while we still can
Depends on D96657
Reviewed By: ldionne, Mordante, #libc
Differential Revision: https://reviews.llvm.org/D96660
GitOrigin-RevId: 3f5438c46cc8ddfbd221336153700da0bc527752
diff --git a/include/concepts b/include/concepts
index 3d57c40..a644325 100644
--- a/include/concepts
+++ b/include/concepts
@@ -173,6 +173,13 @@
static_cast<_To>(__f());
};
+// [concept.commonref]
+template<class _Tp, class _Up>
+concept common_reference_with =
+ same_as<common_reference_t<_Tp, _Up>, common_reference_t<_Up, _Tp>> &&
+ convertible_to<_Tp, common_reference_t<_Tp, _Up>> &&
+ convertible_to<_Up, common_reference_t<_Tp, _Up>>;
+
// [concepts.arithmetic], arithmetic concepts
template<class _Tp>
concept integral = is_integral_v<_Tp>;