false 분기에서 Static_Assert가 실패한 경우 constexpr
질문:
제안에도 불구하고 static_assert에 대한 명시적인 언급이 부족합니다. 왜 사용됩니까? constexpr if 문의 취하지 않은 분기가 잘못된 형식으로 간주됩니까?
답변:
템플릿 규칙에 따라([temp.res]/8) , 다음과 같은 경우 프로그램은 형식이 잘못된 NDR입니다(진단이 필요하지 않음).
다음으로 평가되는 비종속 조건이 있는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!