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

履歴 編集

function
<meta>

std::meta::is_deleted(C++26)

namespace std::meta {
  consteval bool is_deleted(info r);
}

概要

削除関数(規格上のdeleted function)であるかを判定する。

削除関数には、以下が含まれる:

  • = deleteを明示的に付加して宣言された関数
  • 暗黙的にdeleteされる関数(例えば、deleteされた基底クラスの特殊メンバ関数によって、派生クラスで暗黙的に対応する特殊メンバ関数がdeleteされる場合)
  • = defaultを明示的に付加して宣言されたが、結果としてdeleteされる関数(例えば、基底クラスのムーブコンストラクタがdeleteされている状態で、派生クラスで= default指定されたムーブコンストラクタ)

戻り値

rが削除関数を表す場合にtrueを返す。

#include <meta>

struct B {
  B(const B&) = delete;
  B(B&&) = delete;
};

struct S : B {
  S() = delete;     // 明示的にdelete宣言された関数: 削除関数
  // S(const S&);   // 暗黙的に宣言されるが基底のdeleteにより削除関数とみなされる
  S(S&&) = default; // 明示的にdefault宣言だが、基底クラスのdeleteにより削除関数とみなされる
};

int main() {
  template for (constexpr auto m :
      std::define_static_array(std::meta::members_of(^^S,
          std::meta::access_context::unchecked()))) {
    // S()、S(const S&)、S(S&&)はいずれも削除関数
    if constexpr (std::meta::is_constructor(m)) {
      static_assert(std::meta::is_deleted(m));
    }
  }
}

出力

バージョン

言語

  • C++26

処理系

参照