types_is_lvalue_reference (lvalue 참조 판별)
std::is_lvalue_reference는 주어진 타입 T가 lvalue 참조 타입인지 아닌지를 컴파일 타임에 판별하는 타입 특성(trait)이에요. 이 특성을 사용하면 템플릿 코드에서 타입이 T& 형태인지 여부를 상수로 확인할 수 있어요. C++11부터 사용할 수 있고, C++17부터는 is_lvalue_reference_v 변수 템플릿으로 더 간결하게 쓸 수 있어요.
출처: cppreference
본문
std::is_lvalue_reference는 <type_traits> 헤더에 정의된 UnaryTypeTrait예요. T가 lvalue 참조 타입인지 검사해서, 맞다면 value가 true가 되고, 아니면 false가 돼요. 만약 프로그램에서 std::is_lvalue_reference나 std::is_lvalue_reference_v에 대한 특수화를 추가하면 동작이 정의되지 않아요.
템플릿 매개변수
헬퍼 변수 템플릿
template < class T > constexpr bool is_lvalue_reference_v = is_lvalue_reference < T >:: value ; |
(since C++17) |
std::integral_constant에서 상속받은 멤버
멤버 상수
value [static] |
T가 lvalue 참조 타입이면 true, 아니면 false (공용 정적 멤버 상수) |
멤버 함수
operator bool |
객체를 bool로 변환하고 value를 반환해요 (공용 멤버 함수) |
operator() (C++14) |
value를 반환해요 (공용 멤버 함수) |
멤버 타입
| Type |
Definition |
value_type |
bool |
type |
std::integral_constant<bool, value> |
가능한 구현
template < class T > struct is_lvalue_reference : std :: false_type {};
template < class T > struct is_lvalue_reference < T &> : std :: true_type {};
예제
#include <type_traits>
class A {};
static_assert(std::is_lvalue_reference_v<A> == false);
static_assert(std::is_lvalue_reference_v<A&> == true);
static_assert(std::is_lvalue_reference_v<A&&> == false);
static_assert(std::is_lvalue_reference_v<int> == false);
static_assert(std::is_lvalue_reference_v<int&> == true);
static_assert(std::is_lvalue_reference_v<int&&> == false);
int main() {}
같이 보기
is_reference (C++11) |
타입이 lvalue 참조 또는 rvalue 참조인지 검사해요 (클래스 템플릿) |
is_rvalue_reference (C++11) |
타입이 rvalue 참조인지 검사해요 (클래스 템플릿) |
is_lvalue_reference_type (C++26) |
리플렉션이 lvalue 참조를 나타내는지 검사해요 (함수) |
더 알아보기 (Learn more)
cppreference