[libcxx] adds concept `std::convertible_to`
Implements parts of:
- P0898R3 Standard Library Concepts
- P1754 Rename concepts to standard_case for C++20, while we still can
Differential Revision: https://reviews.llvm.org/D77961
GitOrigin-RevId: 8caf835337f7bae9d686afdfc16c4897f2da61d8
diff --git a/include/concepts b/include/concepts
index e245e54..1a18193 100644
--- a/include/concepts
+++ b/include/concepts
@@ -157,6 +157,14 @@
template<class _Tp, class _Up>
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
+// [concept.convertible]
+template<class _From, class _To>
+concept convertible_to =
+ is_convertible_v<_From, _To> &&
+ requires(add_rvalue_reference_t<_From> (&__f)()) {
+ static_cast<_To>(__f());
+ };
+
// [concept.destructible]
template<class _Tp>
@@ -176,7 +184,6 @@
concept default_initializable = constructible_from<_Tp> &&
requires { _Tp{}; } && __default_initializable<_Tp>;
-
#endif //_LIBCPP_STD_VER > 17 && defined(__cpp_concepts) && __cpp_concepts >= 201811L
_LIBCPP_END_NAMESPACE_STD