> 백엔드 개발 > C++ > GCC가 네임스페이스가 아닌 범위에서 명시적 특수화를 컴파일하지 못하는 이유는 무엇입니까?

GCC가 네임스페이스가 아닌 범위에서 명시적 특수화를 컴파일하지 못하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-16 05:40:03
원래의
223명이 탐색했습니다.

Why Does GCC Fail to Compile Explicit Specialization in Non-Namespace Scope?

비네임스페이스 범위의 명시적 특수화

Clang에서 성공적으로 컴파일되었음에도 불구하고 해당 코드가 GCC에서 컴파일되지 않습니다. C 표준([temp.expl.spec])에 따르면 해당 기본 템플릿이 정의될 수 있는 모든 범위에서 명시적 특수화를 선언할 수 있습니다.

이 동작은 GCC의 버그인 것으로 보입니다. CWG 727에 따르면 명시적 특수화에 관한 [temp.expl.spec]의 규칙은 모든 관련 범위에서 이러한 선언을 허용하도록 수정되었습니다.

명시적 특수화 범위

원래 표준에서는 특수화된 템플릿을 포함하는 네임스페이스에서 명시적인 특수화를 선언해야 한다고 명시했습니다. 그러나 현재 표준은 기본 템플릿을 정의할 수 있는 모든 범위에서 명시적인 특수화를 허용합니다.

  • 클래스 정의(12.2)
  • 멤버 함수(17.6.2)
  • 인라인 네임스페이스(10.3.1.2)

GCC가 이 업데이트된 규칙을 준수하지 못한 것은 버그를 구성합니다. 이 문제는 버그 85282로 확인되었으며 현재 GCC 개발팀에서 추적하고 있습니다.

위 내용은 GCC가 네임스페이스가 아닌 범위에서 명시적 특수화를 컴파일하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿