types_is_lvalue_reference

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 참조 타입인지 검사해서, 맞다면 valuetrue가 되고, 아니면 false가 돼요. 만약 프로그램에서 std::is_lvalue_referencestd::is_lvalue_reference_v에 대한 특수화를 추가하면 동작이 정의되지 않아요.

템플릿 매개변수

T - 검사할 타입

헬퍼 변수 템플릿

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