最終更新日時(UTC):
が更新

履歴 編集

concept
<concepts>

std::default_initializable(C++20)

namespace std {
  template<class T>
  concept default_initializable = /*see below*/;
}

概要

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>;

#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");
}

出力

int is default initializable
S is not default initializable

バージョン

言語

  • C++20

処理系

関連項目

参照