Ваша проблема имеет очень мало общего с enable_if
// you declare a structure named baz which takes 2 template parameters, with void
// as the default value of the second one.
template <class T, class Enable = void> struct baz;
// Partial specialization for a baz with T and an std::enable_if<true>
template <class T> struct baz<T, std::enable_if<true>> {};
// Declare a baz<int, void> (remember the default parameter?):
baz<int> c; //error C2079: 'c' uses undefined struct 'baz<T>'
baz<int, void>
имеет неполный тип в этой точке.Та же проблема возникнет без enable_if
:
template <class T, class U = void>
struct S;
template <class T>
struct S<T, int>
{ };
S<double> s;
И, как сказал Джеймс, вы неправильно используете enable_if
. Документация Boost для enable_if
прекрасно объясняет это.