Поделиться через


/Zc:templateScope (Проверка теневой параметров шаблона)

Параметр /Zc:templateScope компилятора позволяет проверять поведение C++ уровня "Стандартный" вокруг тени параметров шаблона.

Синтаксис

/Zc:templateScope[-]

Замечания

Стандарт C++ не позволяет повторно использовать имя параметра шаблона (или тень) для другого объявления в области шаблона. Параметр /Zc:templateScope компилятора включает проверку ошибок для такой тени.

Этот /Zc:templateScope параметр доступен в Visual Studio 2022 версии 17.5( предварительная версия 1). Параметр отключен по умолчанию, даже если код компилируется с помощью /permissive- параметра (или параметра, который подразумевает /permissive-, например /std:c++20 или /std:c++latest). Чтобы включить проверку ошибок, необходимо явно добавить /Zc:templateScope в командную строку компилятора. Чтобы явно отключить проверку, используйте /Zc:templateScope- этот параметр.

Пример

В этом /Zc:templateScopeпримере кода возникает ошибка:

template<typename T>
void f(T&& t) {
    int T = 13;
}

/* Output:
t.cpp(3): error C7527: 'T': a template parameter name cannot be reused within its scope
*/

Установка параметра компилятора в Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.

  3. В дополнительных параметрах добавьте /Zc:templateScope или /Zc:templateScope-. Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.

См. также

/Zc (Соответствие)
/permissive-
/std (определение стандартной версии языка)