Skip to content

Latest commit

 

History

History
95 lines (70 loc) · 2.26 KB

default_initializable.md

File metadata and controls

95 lines (70 loc) · 2.26 KB

default_initializable

  • concepts[meta header]
  • concept[meta id-type]
  • std[meta namespace]
  • cpp20[meta cpp]
namespace std {
  template<class T>
  concept default_initializable = /*see below*/;
}
  • see below[italic]

概要

default_initializableは、任意の型Tがデフォルト構築可能であること表すコンセプトである。

要件

まず、説明専用の変数テンプレートis-default-initializable<T>を、型TについてT t;のような変数定義が有効である場合にtrueを示す変数テンプレートとして定義する。

template<class T>
inline constexpr bool is-default-initializable;

default_initializableコンセプトは以下のように定義される。

template<class T>
concept default_initializable = constructible_from<T> &&
                                requires { T{}; } &&
                                is-default-initializable<T>;
  • constructible_from[link /reference/concepts/constructible_from.md]

#include <iostream>
#include <concepts>

template<std::default_initializable T>
void f(const char* name) {
  std::cout << name << " is default initializable" << std::endl;
}

template<typename T>
void f(const char* name) {
  std::cout << name << " is not default initializable" << std::endl;
}

struct S {
  S() = delete;
  
  S(int m) : n(m) {}

  int n = 0;
};

int main() {
  f<int>("int");
  f<S>("S");
}
  • std::default_initializable[color ff0000]

出力

int is default initializable
S is not default initializable

バージョン

言語

  • C++20

処理系

関連項目

参照