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

履歴 編集

function
<meta>

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

namespace std::meta {
  consteval bool is_assignable_type(info type_dst, info type_src);
}

概要

declval<T>() = declval<U>()が有効かどうかで代入可能かを判定する。std::is_assignableに対応する。

戻り値

type_dsttype_srcが表す型について、代入が可能な場合にtrueを返す。

例外

type_dstまたはtype_srcが型を表さない場合、std::meta::exception例外を送出する。

#include <meta>

struct A {};
struct B {
  B& operator=(const A&) { return *this; }
};

int main() {
  // int&にintを代入可能
  static_assert(std::meta::is_assignable_type(^^int&, ^^int));
  // intにintは代入不可(左辺が左辺値参照でない)
  static_assert(!std::meta::is_assignable_type(^^int, ^^int));
  // const int&にintは代入不可
  static_assert(!std::meta::is_assignable_type(^^const int&, ^^int));

  // BにはAからの代入演算子が定義されている
  static_assert(std::meta::is_assignable_type(^^B&, ^^const A&));
  // AにはBからの代入演算子が定義されていない
  static_assert(!std::meta::is_assignable_type(^^A&, ^^const B&));
}

出力

バージョン

言語

  • C++26

処理系

参照