C 20의 클래스 템플릿 생성자에서 중복 템플릿 매개변수 목록 제거
C 17에서는 클래스 템플릿 생성자가 다음을 갖는 것이 허용되었습니다. 중복 템플릿 매개변수 목록. 예를 들면 다음과 같습니다.
template<typename T> struct S { S<T>(); };
그러나 C 20에서는 더 이상 그렇지 않습니다. 최근 변경 사항에 따라 클래스 템플릿의 모든 생성자는 주입된 클래스 이름을 사용해야 하므로 선언자에서 중복이 제거됩니다.
이 변경 사항은 C 20 초안의 호환성 섹션에 문서화되어 있습니다.
[diff.cpp17.class] **Affected subclauses**: [class.ctor] and [class.dtor] **Change**: A simple-template-id is no longer valid as the declarator-id of a constructor or destructor. **Rationale**: Remove potentially error-prone option for redundancy. **Effect on original feature**: Valid C++ 2017 code may fail to compile in this International Standard.
구체적으로 생성자 선언자의 id-expression은 이제 다음 중 하나를 취해야 합니다. 양식:
따라서, C 20의 올바른 생성자 선언은 다음과 같습니다.
template<typename T> struct S { S(); };
위 내용은 C 20 클래스 템플릿 생성자의 중복 템플릿 매개 변수 목록이 이제 금지되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!