constexpr이 아닌 라이브러리 함수의 확장 처리가 적합합니까?
constexpr이 아닌 표준 라이브러리 함수를 constexpr로 처리하는 GCC의 능력 특정 상황에서는 다음과 같은 질문이 제기됩니다.
표준의 모순
C 11 표준 초안에서는 내장 함수를 constexpr로 처리하는 것이 명시적으로 허용되는 것으로 나타났습니다. 그러나 C 12에서는 합의가 바뀌고 제안이 변경되어 C 14에서는 이 동작을 명시적으로 금지하게 되었습니다.
As-If Rule
C 11에서는 마치 규칙이 이 동작을 허용하는지 여부는 불분명했습니다. 일부 의견에서는 그럴 수도 있다고 제안했지만, 이 특정 주제를 다루는 LWG 이슈 2013의 해결에서는 이러한 해석이 확인되지 않았습니다.
GCC의 구현
GCC 구현 이 동작은 constexpr 함수로 암시적 처리를 허용하는 LWG 2013의 이전에 제안된 해결 방법을 기반으로 합니다. 그러나 최종 해결 방법이 변경되어 이 확장은 이제 C 14에서 부적합합니다.
엄격 모드의 적합성
C 14 표준을 준수하기 위해 GCC 엄격한 적합성 모드(-std=c 11 -pedantic 또는 -std=c 14 -pedantic)에서 경고를 발행해야 합니다. constexpr 컨텍스트에서 사용되는 비-constexpr 라이브러리 함수. 또는 이러한 모드에서 이 동작을 비활성화해야 합니다.
내장 면제
컴파일러 내장 기능은 표준에서 다루지 않으므로 다르게 처리될 수 있습니다. constexpr 컨텍스트에서 컴파일러 내장 기능을 사용하는 것이 허용될 가능성이 높습니다.
위 내용은 Constexpr 컨텍스트에서 비constexpr 표준 라이브러리 함수에 대한 GCC의 확장 처리가 C 표준을 준수합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!