>백엔드 개발 >C++ >Untaken `if constexpr` 블록에서 실패한 `static_assert`는 프로그램 유효성에 어떤 영향을 줍니까?

Untaken `if constexpr` 블록에서 실패한 `static_assert`는 프로그램 유효성에 어떤 영향을 줍니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-27 04:17:09746검색

How Does a Failed `static_assert` in an Untaken `if constexpr` Block Affect Program Validity?

실패한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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