P0091: 클래스 템플릿에 대한 템플릿 인수 추론 제안의 의도에도 불구하고 동작을 정렬합니다. 함수 및 클래스 템플릿의 경우 클래스 템플릿에 대한 부분 공제가 유지됩니다. 사용할 수 없습니다.
클래스 템플릿을 고려하세요.
template <std::size_t S, typename T> struct test { static constexpr auto size = S; using type_t = T; test(type_t (&input)[size]) : data(input) {} type_t (&data)[size]{}; };
사용 편의성을 위해 도우미 기능을 사용하는 경우:
template <std::size_t S, typename T> test<S, T> helper(T (&input)[S]) { return input; }
다음과 같은 코드:
int buffer[5]; auto a = helper<5, int>(buffer); // No deduction auto b = helper<5>(buffer); // Type deduced: FAILS auto c = helper(buffer); // Type and size deduced
성공적으로 컴파일되었습니다. 그러나 최신 컴파일러 버전에서는 부분 추론(즉, auto b = helper<5>(buffer);)이 실패하여 부분 클래스 템플릿 인수 추론이 실제로 지원되지 않음을 나타냅니다.
이러한 제한은 우려에서 비롯됩니다. 다음과 같은 경우에 발생할 수 있는 혼란에 대해 제기되었습니다.
// Deduced as tuple<int, string, float> // but tuple<int> is also a valid type! tuple<int> t(42, "waldo", 2.0f);
따라서 제안은 처음에 공제 동작을 통합하는 것을 목표로 했지만 클래스 템플릿에 대한 부분 공제는 여전히 남아 있습니다. 잠재적인 모호성 문제로 인해 작동하지 않습니다.
위 내용은 부분 클래스 템플릿 인수 추론이 여전히 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!