std::add_lvalue_reference, std::add_rvalue_reference
提供: cppreference.com
| ヘッダ <type_traits> で定義
|
||
| template< class T > struct add_lvalue_reference; |
(1) | (C++11およびそれ以降) |
| template< class T > struct add_rvalue_reference; |
(2) | (C++11およびそれ以降) |
T の左辺値参照型または右辺値参照型を作成します。
1)
T がオブジェクト型または cv 修飾も ref 修飾もされていない (C++17およびそれ以降)関数型であれば、 T& であるメンバ型 type が提供されます。 T が何らかの型 U の右辺値参照であれば、 type は U& です。 そうでなければ、 type は T です。2)
T がオブジェクト型または cv 修飾も ref 修飾もされていない (C++17およびそれ以降)関数型であれば、 T&& であるメンバ型 type が提供されます。 そうでなければ type は T です。目次 |
[編集] メンバ型
| 名前 | 定義 |
type
|
T への参照、またはそれが許されない場合は T
|
[編集] ヘルパー型
| template< class T > using add_lvalue_reference_t = typename add_lvalue_reference<T>::type; |
(C++14およびそれ以降) | |
| template< class T > using add_rvalue_reference_t = typename add_rvalue_reference<T>::type; |
(C++14およびそれ以降) | |
[編集] ノート
これらの型は参照の縮約のルールを尊重します。
std::add_lvalue_reference<T&>::type is T&
std::add_lvalue_reference<T&&>::type is T&
std::add_rvalue_reference<T&>::type is T&
std::add_rvalue_reference<T&&>::type is T&&
[編集] 例
Run this code
#include <iostream> #include <type_traits> int main() { using nonref = int; using lref = typename std::add_lvalue_reference<nonref>::type; using rref = typename std::add_rvalue_reference<nonref>::type; std::cout << std::boolalpha; std::cout << std::is_lvalue_reference<nonref>::value << '\n'; std::cout << std::is_lvalue_reference<lref>::value << '\n'; std::cout << std::is_rvalue_reference<rref>::value << '\n'; }
出力:
false true true
[編集] 関連項目
| (C++11) |
型が左辺値参照または右辺値参照かどうか調べます (クラステンプレート) |
| (C++11) |
指定された型から参照を削除します (クラステンプレート) |
| (C++20) |
std::remove_cv と std::remove_reference を合わせたもの (クラステンプレート) |

