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には、名前空間