[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