Visual Studio 2017 15.9.13 не может использовать шаблоны авто с ++ - PullRequest
1 голос
/ 09 июля 2019

Я установил 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);
    }
};

, но автоматические шаблоны выглядят болееэлегантный

Ответы [ 2 ]

3 голосов
/ 09 июля 2019

Убедитесь, что на страницах свойств вашего проекта установлен правильный «языковой стандарт C ++».По умолчанию для VS 2017 установлено значение C++14.

. Щелкните правой кнопкой мыши свой проект и выберите «Свойства».Затем разверните узел C/C++ в виде дерева с левой стороны.Выберите «Язык» в расширенном меню.Убедитесь, что для "C ++ Language Standard" установлено значение ISO C++17 Standard (/std:c++17).

. Если оно пустое, по умолчанию будет установлено значение C++14.

.
1 голос
/ 09 июля 2019

Вам необходимо включить поддержку C ++ 17 в VS2017. По умолчанию VS2017 использует C ++ 14 для новых проектов. Чтобы включить C ++ 17, либо используйте /std:c++17 в командной строке, либо перейдите в Project -> Properties -> Language -> C ++ Language Standard и выберите /std:c++17

Вы также можете использовать /std:c++latest и получать самую актуальную / экспериментальную поддержку

...