Move IsLvalueReference to the correct place, slightly beef up its documentation. No bug, r=trivial

--HG--
extra : rebase_source : 5998289e3993cd0384efe0ab7d21b8097dedac2f
This commit is contained in:
Jeff Walden 2013-11-20 14:37:14 -08:00
parent cc6ac49bd5
commit 4ff31eefe1

View File

@ -130,6 +130,23 @@ struct IsPointer : FalseType {};
template<typename T>
struct IsPointer<T*> : TrueType {};
/**
* IsLvalueReference determines whether a type is an lvalue reference.
*
* mozilla::IsLvalueReference<struct S*>::value is false;
* mozilla::IsLvalueReference<int**>::value is false;
* mozilla::IsLvalueReference<void (*)(void)>::value is false;
* mozilla::IsLvalueReference<int>::value is false;
* mozilla::IsLvalueReference<struct S>::value is false;
* mozilla::IsLvalueReference<struct S*&>::value is true;
* mozilla::IsLvalueReference<struct S&&>::value is false.
*/
template<typename T>
struct IsLvalueReference : FalseType {};
template<typename T>
struct IsLvalueReference<T&> : TrueType {};
namespace detail {
// __is_enum is a supported extension across all of our supported compilers.
@ -424,16 +441,6 @@ struct IsConvertible
: IntegralConstant<bool, detail::ConvertibleTester<From, To>::value>
{};
/**
* Is IsLvalueReference<T> is true if its template param is T& and is false if
* its type is T or T&&.
*/
template<typename T>
struct IsLvalueReference : FalseType {};
template<typename T>
struct IsLvalueReference<T&> : TrueType {};
/* 20.9.7 Transformations between types [meta.trans] */
/* 20.9.7.1 Const-volatile modifications [meta.trans.cv] */