名前空間
変種
操作

std::copy_constructible

From 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` が左辺値参照型である場合、または `T` が move_constructible なオブジェクト型であり、その型のオブジェクトが、(場合によっては `const` 修飾された) 左辺値、または `const` 修飾された右辺値から、直接初期化およびコピー初期化の両方のコンテキストにおいて、通常の意味(ソースは変更されずにコピーが構築される)で構築できる場合に満たされます。

[edit] 意味的要件

もし `T` がオブジェクト型である場合、`copy_constructible<T>` は以下の場合のみモデル化されます。

  • v、型 (場合によっては `const` 修飾された) `T` の左辺値、または `const T` 型の右辺値が与えられた場合、

以下の条件が真である。

  • `T u = v;` の定義の後、`u` は `v` と等しく、`v` は変更されない。
  • `T(v)` は `v` と等しく、`v` を変更しない。

[edit] 参考文献

  • C++23標準 (ISO/IEC 14882:2024)
  • 18.4.14 コンセプト `copy_constructible` [concept.copyconstructible]
  • C++20 standard (ISO/IEC 14882:2020)
  • 18.4.14 コンセプト `copy_constructible` [concept.copyconstructible]

[edit] 関連項目

型がコピーコンストラクタを持つかをチェックする
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)