Следующий код
template <class Integral>
using enable_if_integral_t = typename std::enable_if<std::is_integral<Integral>::value>::type;
template <class Integral, class Enable = void>
class DigitsNumber;
template <class Integral>
class DigitsNumber<Integral, enable_if_integral_t<Integral>>{
};
Генерирует ошибку в MSVC 2013:
ошибка C3203: «enable_if_integral_t»: шаблон специализированного псевдонима не может использоваться в качестве аргумента шаблона для параметра шаблона «Enable», ожидается реальный тип
Но компилируется нормально в gcc.
Соответствует ли этот код стандарту C ++ 11 и функции, не допускающей ошибок в Visual Studio, или не соответствует стандарту, а является расширением gcc.
Есть ли способ заставить эту работу в VS?
Спасибо.
Я смог обойти это с помощью ссылка на сайт тот DYP предоставлена:
template <class Integral>
struct MSVCWorkaround : std::enable_if<std::is_integral<Integral>::value, SomeType> {};
template <class Integral>
using enable_if_integral_t = typename MSVCWorkaround<Integral>::type;
Других решений пока нет …