개념으로 식별되는 특정 클래스 세트를 각각 적용 할 수있는 두 개 (또는 그 이상)의 템플릿이 있습니다. 두 개의 템플릿이 동일한 이름을 가질 수있게하려면 특수화해야합니다.C++ 개념 및 템플릿 전문화; 사용자 친화적 인 컴파일러 오류를 얻는 방법
template< typename T >
struct pin_in { static_assert(always_false<T>::value, . . .); };
template< is_pin_in T >
struct pin_in<T> . . .
template< is_pin_in_out T >
struct pin_in<T> . . .
전문화 중 하나가 일치하면 정상적으로 작동합니다. 일치하지 않으면 기본 템플릿이 선택되고 어설 션 오류가 발생합니다. 메커니즘이 작동합니다. 나는 개념을 좋아한다!
그러나 오류 메시지 (GCC 7.2.0)가 어서션을 가리 킵니다. 어떻게 든 기본 템플릿을 선택하지 않도록 할 수 있으므로 템플릿이 인수 클래스와 일치하지 않는다는 오류 메시지가 나타납니다.
정적 어설 션에 메시지 (두 번째 인수)를 추가 할 수없는 이유는 무엇입니까? –
물론 나는 그것이있다. . . 그러나 기본 오류 메시지는 여전히 원인이 된 행이 아니라 어설 션을 가리 킵니다. –
때때로 컴파일러는 Object_ 인스턴스화 및 _ 여기에서 _required의 형식으로 백 트레이스를 추가합니다. 여기서는 인스턴스화가 발생한 위치를 가리 킵니다. –