Namespaces
Variants

std:: reference_converts_from_temporary

From ja.cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
定義先ヘッダ <type_traits>
template < class T, class U >
struct reference_converts_from_temporary ;
(C++23以降)

Uがスカラ型またはcv修飾された void である場合、 Vを std:: remove_cv_t < U > とし、それ以外の場合はUとする。Tが参照型であり、仮想的な式 e が decltype ( e ) がVとなる場合、変数定義 T ref = e ; が適正であり、かつ 一時オブジェクトをバインド する場合、メンバ定数valueを true に設定する。それ以外の場合、valueは false となる。

T がconst修飾(volatile修飾ではない)オブジェクト型への左辺値参照型、または右辺値参照型である場合、 std:: remove_reference_t < T > と std:: remove_reference_t < U > はともに 完全型 、 cv void 、または 境界不明の配列 でなければならない。そうでない場合、動作は未定義となる。

上記のテンプレートのインスタンス化が、直接的または間接的に不完全型に依存しており、その型が仮に完全化された場合に異なる結果をもたらす可能性がある場合、その動作は未定義です。

プログラムが std::reference_converts_from_temporary または std::reference_converts_from_temporary_v に対する特殊化を追加する場合、動作は未定義です。

目次

ヘルパー変数テンプレート

template< class T, class U >
constexpr bool reference_converts_from_temporary_v =
    std::reference_converts_from_temporary<T, U>::value;
(C++23以上)

std:: integral_constant から継承

メンバ定数

value
[static]
true Tが参照型であり、コピー初期化においてU値がTに束縛可能で、一時オブジェクトが参照に束縛される場合は false そうでない場合
(公開静的メンバ定数)

メンバ関数

operator bool
オブジェクトを bool に変換し、 value を返す
(公開メンバ関数)
operator()
(C++14)
value を返す
(公開メンバ関数)

メンバ型

型 定義
value_type bool
type std:: integral_constant < bool , value >

注記

std::reference_converts_from_temporary は、常にダングリング参照を生成する一部のケースを拒否するために使用できます。

例

#include <type_traits>
int main() {}
static_assert(
    std::reference_converts_from_temporary_v<int&&, int> == true &&
    std::reference_converts_from_temporary_v<const int&, int> == true &&
    std::reference_converts_from_temporary_v<int&&, int&&> == false &&
    std::reference_converts_from_temporary_v<const int&, int&&> == false &&
    std::reference_converts_from_temporary_v<int&&, long&&> == true &&
    std::reference_converts_from_temporary_v<int&&, long> == true);

関連項目

型が他の型に変換可能かどうかをチェックする
(クラステンプレート)
(C++17) (C++23)
任意の Callable オブジェクトを指定された引数で呼び出す 戻り値の型を指定する可能性あり (C++23以降)
(関数テンプレート)
(C++11)
関数オブジェクトに1つ以上の引数をバインドする
(関数テンプレート)
(C++17)
1つ以上の variant が保持する引数で指定されたファンクタを呼び出す
(関数テンプレート)
新しい std::function インスタンスを構築する
( std::function<R(Args...)> の公開メンバ関数)
新しい std::move_only_function オブジェクトを構築する
( std::move_only_function の公開メンバ関数)
タスクオブジェクトを構築する
( std::packaged_task<R(Args...)> の公開メンバ関数)