Я установил Visual Studio 2017 для разработки рабочего стола c ++ и Linux примерно час назад. Я попробовал этот код, который использует автоматические шаблоны c ++ 17, и был удивлен, что он выдает ошибку:
Error C3533 a parameter cannot have a type that contains 'auto'
это код, вызывающий проблему
template <class T, T null_value, bool no_negative, auto Deleter>
struct HandleHelper
{
using pointer = HandleWrapper<T, null_value, no_negative>;
void operator(pointer p)
{
Deleter(p);
}
};
до того, как в Visual Studio 2015 я использовал что-то подобное из-за отсутствия поддержки c ++ 17:
template <class T, T null_value, bool no_negative, class DelType, DelType Deleter>
struct HandleHelper
{
using pointer = HandleWrapper<T, null_value, no_negative>;
void operator(pointer p)
{
Deleter(p);
}
};
, но автоматические шаблоны выглядят болееэлегантный