概要
式declval<T>() = declval<U>()が有効かどうかで代入可能かを判定する。std::is_assignableに対応する。
戻り値
type_dstとtype_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
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??