std :: enable과 같은 일종의 std :: enable_if_and_else를 만들 수는 있지만 정의되지 않은 클래스에 대해서는 컴파일 타임 오류가 없습니다. 여기 std :: conditional with SFINAE
은 예입니다답변
이 :: 표준처럼, 표준 : 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
은 이미 원하는 내용입니다.
네, 맞습니다. 내가 작업하고 있던 코드는 다르기 때문에 기본 케이스로 줄이려고했지만 약간의 차이가 있습니다. 나는 그 질문을 편집 할 것이다. 이 점을 지적 해 주니 덕분에 – user3770392
ok 코드에서 문제가 무엇인지 발견했습니다. 나는 std :: conditional을 여러면에서 테스트했으며 여러분은 완전히 옳다. 다시 감사합니다 – user3770392
'my''''''''''''''''''''''-'''''을 취해야합니까? – Quentin
예, 복사하여 붙여 넣기가 잘못되었습니다. 네가 옳아. 감사합니다 – user3770392
어쨌든 [나는 오류를 재현 할 수 없습니다] (http://coliru.stacked-crooked.com/a/5ce6197045347aed). 어떤 컴파일러를 사용하고 있습니까? – Quentin