std::nontype

std::nontype (C++26)

여기서는 C++26에서 추가된 std::nontypestd::nontype_t에 대해 알아볼게요. 이들은 비타입 템플릿 인자를 타입으로 감싸는 도구로, 함수 인자 등으로 전달할 때 유용해요. 주로 std::function_ref 같은 곳에서 사용된답니다.

출처: cppreference

본문

정의

<utility> 헤더에 다음과 같이 정의되어 있어요.

template < auto V > struct nontype_t { explicit nontype_t () = default ; };
template < auto V > constexpr std :: nontype_t < V > nontype {};

첫 번째 선언은 V를 감싸는 빈 구조체 타입 nontype_t<V>를 만들어요. 두 번째 선언은 그 타입의 상수 객체 nontype<V>를 제공하죠.

템플릿 매개변수

V - 구조적 타입(structural type)의 비타입 템플릿 매개변수예요.

V는 구조적 타입이어야 하므로, 정수·열거형·포인터·리터럴 클래스 타입 등이 올 수 있어요.

용도

nontype은 비타입 템플릿 인자를 일반 함수 인자처럼 전달하고 싶을 때 사용해요. 예를 들어 std::function_ref가 특정 상수 값을 나타내는 템플릿 인자를 받을 때, 이 래퍼를 통해 타입으로 다룰 수 있게 돼요.

같이 보기

function_ref (C++26) 모든 호출 가능 객체를 소유하지 않고 참조하는 래퍼 (클래스 템플릿)

더 알아보기 (Learn more)

cppreference