types_reference_converts_from_temporary

types_reference_converts_from_temporary (임시 객체로부터 참조 변환 여부를 확인하는 타입 특성)

이 페이지는 C++23에서 도입된 std::reference_converts_from_temporary 타입 특성에 대해 설명해요. 이 특성은 복사 초기화에서 참조 타입이 임시 객체를 바인딩할 수 있는지 컴파일 타임에 판별해 줘요. 주로 항상 댕글링 참조를 만드는 코드를 거부하는 데 유용해요.

출처: cppreference

본문

정의

From이 스칼라 타입이거나 cv void라면 Vstd::remove_cv_t<From>이고, 그 외의 경우에는 VFrom이에요. To가 참조 타입이고, decltype(e)V가 되는 가상의 표현식 e가 주어졌을 때, 변수 정의 To ref = e;가 유효하고 임시 객체를 ref에 바인딩한다면, 멤버 상수 valuetrue가 돼요. 그렇지 않으면 valuefalse예요.

To가 const 한정(비휘발성) 객체 타입에 대한 lvalue 참조 타입이거나 rvalue 참조 타입이라면, std::remove_reference_t<To>std::remove_reference_t<From>은 모두 완전 타입, cv void, 또는 크기를 알 수 없는 배열이어야 해요. 그렇지 않으면 동작이 정의되지 않아요.

위 템플릿의 인스턴스화가 직접 또는 간접적으로 불완전 타입에 의존하고, 해당 타입이 가상적으로 완전해질 때 인스턴스화 결과가 달라질 수 있다면 동작이 정의되지 않아요.

프로그램이 std::reference_converts_from_temporary 또는 std::reference_converts_from_temporary_v에 대한 특수화를 추가하면 동작이 정의되지 않아요.

헬퍼 변수 템플릿

템플릿
template < class To , class From > constexpr bool reference_converts_from_temporary_v = std :: reference_converts_from_temporary < To , From >:: value ; (C++23부터)

std::integral_constant로부터 상속됨

멤버 상수

멤버 상수 설명
value [static] To가 참조 타입이고, From 값이 복사 초기화에서 To에 바인딩될 수 있으며, 임시 객체가 참조에 바인딩되는 경우 true, 그 외에는 false (공용 정적 멤버 상수)

멤버 함수

멤버 함수 설명
operator bool 객체를 bool로 변환하고 value를 반환해요 (공용 멤버 함수)
operator() (C++14) value를 반환해요 (공용 멤버 함수)

멤버 타입

타입 정의
value_type bool
type std :: integral_constant < bool , value >

Notes

std::reference_converts_from_temporary는 항상 댕글링 참조를 생성하는 일부 경우를 거부하는 데 사용할 수 있어요.

예제

다음 예제는 이 타입 특성이 어떻게 동작하는지 보여줘요.

#include <type_traits>

static_assert
(""
    && std::reference_converts_from_temporary_v<int&&, int> == true
    && std::reference_converts_from_temporary_v<const int&, int> == true
    && std::reference_converts_from_temporary_v<int&&, int&&> == false
    && std::reference_converts_from_temporary_v<const int&, int&&> == false
    && std::reference_converts_from_temporary_v<int&&, long&&> == true
    && std::reference_converts_from_temporary_v<int&&, long> == true
);

int main() {}

같이 보기

is_convertible is_nothrow_convertible (C++11) (C++20) 한 타입이 다른 타입으로 변환될 수 있는지 확인해요 (클래스 템플릿) [edit]
invoke invoke_r (C++17) (C++23) 주어진 인자로 Callable 객체를 호출하고 반환 타입을 지정할 수 있어요 (C++23부터) (함수 템플릿) [edit]
bind (C++11) 하나 이상의 인자를 함수 객체에 바인딩해요 (함수 템플릿) [edit]
visit (C++17) 하나 이상의 variant가 보관한 인자로 제공된 펑터를 호출해요 (함수 템플릿) [edit]
(constructor) 새로운 std::function 인스턴스를 생성해요 (std::function<R(Args...)>의 공용 멤버 함수) [edit]
(constructor) 새로운 std::move_only_function 객체를 생성해요 (std::move_only_function의 공용 멤버 함수) [edit]
(constructor) 작업 객체를 생성해요 (std::packaged_task<R(Args...)>의 공용 멤버 함수) [edit]
reference_constructs_from_temporary (C++23) 직접 초기화에서 참조가 임시 객체에 바인딩되는지 확인해요 (클래스 템플릿) [edit]
reference_converts_from_temporary (C++26) 복사 초기화에서 참조가 임시 객체에 바인딩되는지 확인해요 (함수) [edit]

더 알아보기 (Learn more)

cppreference