std::copy_constructible (C++20 起)

来自cppreference.com
< cpp‎ | concepts
在标头 <concepts> 定义
template< class T >

concept copy_constructible =
    std::move_constructible<T> &&
    std::constructible_from<T, T&> && std::convertible_to<T&, T> &&
    std::constructible_from<T, const T&> && std::convertible_to<const T&, T> &&

    std::constructible_from<T, const T> && std::convertible_to<const T, T>;
(C++20 起)

概念 copy_constructible 若符合这些条件则得到满足:T 为左值引用类型,或若它是 move_constructible 对象类型,而能从(可为 const 的)该类型左值或 const 右值,在直接和复制初始化语境中以通常语义构造该类型的对象(构造副本而不更改源)。

语义要求

T 为对象类型,则 copy_constructible<T> 仅若符合下列条件才得到实现。给定

  • v,(可为 const 的)T 类型的左值或为 const T 类型的右值,

下列均为真:

  • 定义 T u = v; 后,u 等于 vv 不被修改;
  • T(v) 等于 v 且不修改 v

引用

  • C++23 标准(ISO/IEC 14882:2024):
  • 18.4.14 Concept copy_constructible [concept.copyconstructible]
  • C++20 标准(ISO/IEC 14882:2020):
  • 18.4.14 Concept copy_constructible [concept.copyconstructible]

参阅

检查类型是否拥有复制构造函数
(类模板)