2017-04-06 10 views
0

std :: enable과 같은 일종의 std :: enable_if_and_else를 만들 수는 있지만 정의되지 않은 클래스에 대해서는 컴파일 타임 오류가 없습니다. 여기 std :: conditional with SFINAE

은 예입니다

+1

'my''''''''''''''''''''''-'''''을 취해야합니까? – Quentin

+0

예, 복사하여 붙여 넣기가 잘못되었습니다. 네가 옳아. 감사합니다 – user3770392

+1

어쨌든 [나는 오류를 재현 할 수 없습니다] (http://coliru.stacked-crooked.com/a/5ce6197045347aed). 어떤 컴파일러를 사용하고 있습니까? – Quentin

답변

3

이 :: 표준처럼, 표준 : enable_if_and_else의 종류를 만들 수 조건으로하지만, 클래스의 컴파일 시간 오류없이

static constexpr bool myExpr = true; 

struct A {}; 
struct B; 

struct C : 
    std::conditional<myExpr, 
     A, 
     B>::type 
    {}; // Compilation error: B is declared but not defined 

struct D : 
    enable_if_else<myExpr, 
     A, 
     B>::type 
    {}; // It works 

덕분에 그 정의되지 않았습니다.

이해야하지 당신이 완료하는 데 필요한 방법으로 B를 사용하지 않는 때문에 B 경우, 불완전 std::conditional<true, A, B>::type에 대한 오류.

그래서 std::conditional은 이미 원하는 내용입니다.

+0

네, 맞습니다. 내가 작업하고 있던 코드는 다르기 때문에 기본 케이스로 줄이려고했지만 약간의 차이가 있습니다. 나는 그 질문을 편집 할 것이다. 이 점을 지적 해 주니 덕분에 – user3770392

+0

ok 코드에서 문제가 무엇인지 발견했습니다. 나는 std :: conditional을 여러면에서 테스트했으며 여러분은 완전히 옳다. 다시 감사합니다 – user3770392