"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > GCC가 네임스페이스가 아닌 범위에서 명시적 특수화를 컴파일하지 못하는 이유는 무엇입니까?

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

2024년 12월 21일에 게시됨
검색:387

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 개발팀에서 추적하고 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3