>백엔드 개발 >C++ >`constexpr if`의 `false` 분기에 있는 `static_assert`의 형식이 잘못된 이유는 무엇입니까?

`constexpr if`의 `false` 분기에 있는 `static_assert`의 형식이 잘못된 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-25 11:59:111005검색

Why are `static_assert`s in the `false` branch of a `constexpr if` ill-formed?

false 분기에서 Static_Assert가 실패한 경우 constexpr

질문:

제안에도 불구하고 static_assert에 대한 명시적인 언급이 부족합니다. 왜 사용됩니까? constexpr if 문의 취하지 않은 분기가 잘못된 형식으로 간주됩니까?

답변:

템플릿 규칙에 따라([temp.res]/8) , 다음과 같은 경우 프로그램은 형식이 잘못된 NDR입니다(진단이 필요하지 않음).

  • 유효한 전문화를 생성할 수 없습니다. 템플릿의 경우 또는 템플릿 내의 constexpr if 문의 하위 문입니다.
  • 템플릿이 인스턴스화되지 않습니다.

다음으로 평가되는 비종속 조건이 있는 static_assert의 경우 false인 경우 static_assert가 포함된 템플릿에 대해 유효한 특수화를 생성할 수 없습니다. 따라서 그러한 명령문을 포함하는 프로그램은 잘못된 형식입니다.

예:

`
void f() {
if constexpr (false)

static_assert(false);   // ill-formed

}
`

이 예에서 constexpr if 문의 non-taken 분기에 있는 static_assert는 전체 함수를 잘못된 형식으로 만듭니다. static_assert가 포함된 템플릿에 대해 유효한 특수화를 생성할 수 있습니다.

그러나 이 규칙은 다음과 같은 static_asserts에 영향을 미치지 않습니다. 하나 이상의 유형에 대해 참으로 평가될 수 있는 종속 조건입니다.

위 내용은 `constexpr if`의 `false` 분기에 있는 `static_assert`의 형식이 잘못된 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.