std::convertible_to
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <concepts> で定義
|
||
template <class From, class To> concept convertible_to = std::is_convertible_v<From, To> && requires(std::add_rvalue_reference_t<From> (&f)()) { static_cast<To>(f()); }; |
(C++20以上) | |
コンセプト convertible_to<From, To> は From によって指定された型および値カテゴリの式が型 To に暗黙におよび明示的に変換可能であり、2つの形式の変換が同等であることを指定します。
意味論の要件
式 fun() が等しさを維持する (後述) ような std::add_rvalue_reference_t<From> () 型の関数 fun が与えられたとき、以下の内容を満たす場合に限り、 convertible_to<From, To> がモデル化されます。
- 以下のいずれか。
Toがオブジェクト型でもオブジェクトへの参照型でもない。static_cast<To>(fun())が[]() -> To { return fun(); }()と等しい。
かつ、
- 以下のいずれかひとつが真である。
std::add_rvalue_reference_t<From>がオブジェクトへの参照型でない。std::add_rvalue_reference_t<From>が const 修飾されていない型への右辺値参照であり、上の式のいずれかの後fun()によって参照されるオブジェクトの結果の状態が有効だけれども未規定な状態になる。fun()によって参照されるオブジェクトが上の式のいずれによっても変更されない。
等しさの維持
等しい入力を与えると等しい出力が得られる場合、その式は等しさを維持します。
- 式への入力がその被演算子から構成される。
- 式の出力がその結果およびその式によって変更されるすべての被演算子 (もしあれば) から構成される。
等しさを維持することが要求されるすべての式は、さらに安定であることも要求されます。 同じ入力オブジェクトを用いたそのような式の2回の評価は、間にそれらの入力オブジェクトの変更が明示的に挟まれなければ、等しい出力が得られなければなりません。
特に明記されない限り、 requires 式で使用されるすべての式は、等しさを維持することと安定であることが要求され、式の評価は非定数の被演算子のみを変更することができます。 定数である被演算子は変更してはなりません。
関連項目
(C++11)(C++20) |
型が別の型に変換可能かどうか調べます (クラステンプレート) |