/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
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
В дополнительных параметрах добавьте
/Zc:templateScope
или/Zc:templateScope-
. Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
См. также
/Zc
(Соответствие)
/permissive-
/std
(определение стандартной версии языка)