# std::experimental::ranges::CopyConstructible

< cpp‎ | experimental‎ | ranges

定义于头文件 `<experimental/ranges/concepts>` |  |
template <class T> concept bool CopyConstructible = ranges::MoveConstructible<T> && ranges::Constructible<T, T&> && ranges::ConvertibleTo<T&, T> && ranges::Constructible<T, const T&> && ranges::ConvertibleTo<const T&, T> && ranges::Constructible<T, const T> && ranges::ConvertibleTo<const T, T>; |  | (范围 TS)

概念`CopyConstructible` 得到满足，若 `T` 为左值引用类型，或若它是`MoveConstructible`对象类型，其中该类型对象能在直接和复制初始化语境中，从该类型（可能为 const 的）左值或 const 右值以通常语义构造（构造副本而不更改源）。

更精确而言，若 `T` 为对象类型，则 `CopyConstructible<T>` 仅若满足下列条件才得到满足，给定

- `v` ，（可为 const 的） `T` 类型左值或 const T 类型右值，

下列为真

- 定义 T u = v; 后， `u` 等于 `v` ；
- `T{v}` 等于 `v` 。

### 参阅

is_copy_constructible is_trivially_copy_constructible is_nothrow_copy_constructible (C++11)(C++11)(C++11) | 检查类型是否拥有复制构造函数 (类模板)