[libcxx] adds concept std::derived_from
Implements parts of:
- P0898R3 Standard Library Concepts
- P1754 Rename concepts to standard_case for C++20, while we still can
Reviewed By: ldionne, #libc
Differential Revision: https://reviews.llvm.org/D74292
GitOrigin-RevId: c63de225fdd7c7adf6ed041c0bff318d9ae75c00
diff --git a/include/concepts b/include/concepts
index b44e8cc..7c42dc8 100644
--- a/include/concepts
+++ b/include/concepts
@@ -157,6 +157,12 @@
template<class _Tp, class _Up>
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
+// [concept.derived]
+template<class _Dp, class _Bp>
+concept derived_from =
+ is_base_of_v<_Bp, _Dp> &&
+ is_convertible_v<const volatile _Dp*, const volatile _Bp*>;
+
// [concept.convertible]
template<class _From, class _To>
concept convertible_to =