# std::experimental::ranges::DerivedFrom

< cpp‎ | experimental‎ | ranges

定义于头文件 `<experimental/ranges/concepts>` |  |
template < class T, class U > concept bool DerivedFrom = std::is_base_of<U, T>::value && std::is_convertible<std::remove_cv_t<T>*, std::remove_cv_t<U>*>::value; |  | (范围 TS)

概念 DerivedFrom<T, U> 若且唯若 `U` 为类类型且为 `T` 或 `T` 的无歧义公开基类才得到满足。

无关乎在其上述描述中使用 std::is_base_of 和 std::is_convertible 。不要求 `DerivedFrom` 在其实现中使用用它们。故而 DerivedFrom<T, U> 和 std::is_base_of<U,T>::value 或 std::is_convertible<std::remove_cv_t<T>*, std::remove_cv_t<U>*>::value 间不必有任何蕴含关系。

### 参阅

is_base_of (C++11) | 检查一个类型是否派生自另一个类型 (类模板)
is_convertible is_nothrow_convertible (C++11)(C++20) | 检查是否能转换一个类型为另一类型 (类模板)