namespace std {
template <class T>
struct add_lvalue_reference {
using type = …;
};
template <class T>
using add_lvalue_reference_t = typename add_lvalue_reference<T>::type; // C++14
}
概要
型に左辺値参照を追加する。
効果
add_lvalue_reference
は、型T
の名前に&
修飾を付加した型を、メンバ型type
として定義する。- 型
T
が何らかのオブジェクト型もしくは関数型U
への左辺値参照型である場合は、型U&
をメンバ型type
として定義する。 - 型
T
が何らかのオブジェクト型もしくは関数型U
への右辺値参照型である場合は、型U&
をメンバ型type
として定義する。
例
#include <type_traits>
static_assert(std::is_same<std::add_lvalue_reference<int>::type, int&>::value, "transform int to int&");
static_assert(std::is_same<std::add_lvalue_reference<int&>::type, int&>::value, "transform int& to int&");
static_assert(std::is_same<std::add_lvalue_reference<int&&>::type, int&>::value, "transform int&& to int&");
int main() {}
出力
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.3.6 ✅
- Visual C++: 2010 ✅, 2012 ✅, 2013 ✅, 2015 ✅
- 2008には、名前空間
std::tr1
に同じ効果のadd_reference
が存在する。これは提案時の名前である。 - 2010~2013にも、名前空間
std
およびstd::tr1
にadd_reference
が存在する。 add_lvalue_reference_t
は2013から
- 2008には、名前空間