비네임스페이스 범위의 명시적 특수화에 대한 표준과 GCC 불일치
C 표준은 모든 범위에서 선언되는 명시적 템플릿 특수화를 명시적으로 허용합니다. 해당 기본 템플릿을 정의할 수 있습니다. 그러나 GCC의 동작은 이 표준에서 벗어납니다. 이러한 불일치는 네임스페이스 외부에서 선언된 명시적 특수화가 컴파일되지 않는 최신 버전의 GCC에서 관찰되었습니다.
이 문제를 설명하려면 다음 코드를 고려하세요.
template<typename T> struct Widget { template<typename U> void foo(U) { } template<> void foo(int*) { } };
이 동안 코드가 Clang에서 성공적으로 컴파일되면 GCC에서 오류가 발생합니다.
error: explicit specialization in non-namespace scope 'struct Widget<T>'
이 오류는 네임스페이스가 아닌 범위에서 명시적 특수화를 명시적으로 허용하는 C 표준과 일치하지 않습니다. C 표준의 [temp.expl.spec] 단락 2에 따르면:
"해당 기본 템플릿이 정의될 수 있는 모든 범위에서 명시적 특수화를 선언할 수 있습니다."
이러한 표준 편차는 GCC의 잠재적인 버그를 구성합니다. 이 문제를 보고하려면 다음 단계를 따르세요.
이 문제를 보고하면 귀하가 기여할 수 있습니다. GCC 개선에 기여하고 C 표준을 완전히 준수하는지 확인하세요.
위 내용은 GCC가 네임스페이스 외부의 명시적 전문화를 거부하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!