실패한 static_assert는 if constexpr(false) 블록에 어떤 영향을 미치나요?
if constexpr의 사용되지 않은 분기 내의 static_assert 진술은 진단이 필요하지 않은 잘못된 형식으로 간주됩니다. 이 결과는 constexpr if 문 내의 하위 명령문이나 템플릿에 대해 유효한 특수화가 생성될 수 없는 경우 프로그램이 잘못된 형식으로 간주되는 [temp.res]/8의 규칙에서 비롯됩니다.
이 경우 static_assert에서 조건이 비종속적이고 false로 평가되면 어설션이 포함된 템플릿에 대해 유효한 특수화가 생성될 수 없습니다. 이로 인해 분기를 수행하지 않더라도 프로그램의 형식이 잘못됩니다.
그러나 종속 조건이 있는 static_asserts는 영향을 받지 않습니다. 조건이 하나 이상의 유형에 대해 true로 평가될 수 있으면 템플릿은 유효한 상태로 유지됩니다.
예
다음 코드를 고려하세요.
template< typename T>< constexpr void other_library_foo(){ static_assert(std::is_same<T,int>::value); } template<class T> void g() { if constexpr (false) other_library_foo<T>(); } int main(){ g<float>(); g<int>(); }
if constexpr 조건이 false임에도 불구하고 other_library_foo의 static_assert 때문에 코드 형식이 여전히 잘못되었습니다. false로 평가되는 비종속 조건이 포함되어 있습니다.
위 내용은 Untaken `if constexpr` 블록에서 실패한 `static_assert`는 프로그램 유효성에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!