나는 enable_if로 주변을 어지럽 혀 왔고, 나는 모순 된 행동을 발견했습니다. 이것은 VS2010에 있습니다. 나는 그것을 다음 샘플로 줄였습니다.std :: enable_if 전문화가 실패했습니다.
#include <type_traits>
using namespace std;
// enable_if in initial template definition
template <class T, class Enable = enable_if<true>> struct foo {};
foo<int> a; //OK
// explicit specialisation
template <class T, class Enable = void> struct bar;
template <class T> struct bar<T, void> {};
bar<int> b; //OK
// enable_if based specialisation
template <class T, class Enable = void> struct baz;
template <class T> struct baz<T, std::enable_if<true>> {};
baz<int> c; //error C2079: 'c' uses undefined struct 'baz<T>'
이 코드는 컴파일러의 버그입니까?
물론. 감사! – Ayjay
@McNellis : "조건이 거짓 일 때 대체가 실패하면 조건이 참인 경우에만 정의되는 유형의 중첩 된 typedef를 사용해야합니다."... 이것이 의미가 있습니까? 그건 당신이 실패 할 대체품을 얻을 수 없다는 것을 의미합니다. 그게 네가하는 말의 의미인가? –