использование слова «not» в качестве имени класса c ++ вызывает ошибку на VS2019 - PullRequest
1 голос
/ 17 февраля 2020

Я перевожу существующий проект на VS2019. Имея очень простую структуру, которая успешно скомпилирована во всех предыдущих версиях:

template <class Marker>
struct not
{
    // ...

ошибка C2332: 'struct': отсутствует имя тега

NOTE-1 Я проверял генерацией перед компиляцией, что not не заменяется некоторыми макросами, вывод файла *.i полностью соответствует объявлению выше

NOTE-2 конечно, если Я переименую not -> inv тогда все в порядке

Ответы [ 3 ]

5 голосов
/ 17 февраля 2020

not является альтернативным оператором для !, то есть ключевым словом C ++, и поэтому оно не может использоваться в именовании.

См. документы .

4 голосов
/ 17 февраля 2020

not - это ключевое слово в C ++, его нельзя использовать в качестве имени класса.

См. список ключевых слов на cppreference.

3 голосов
/ 17 февраля 2020

not - это ключевое слово в стандартном C ++, которое можно использовать в качестве альтернативы для токена !.

MSV C по умолчанию не поддерживает токены альтернативного оператора. Поэтому они доступны в качестве идентификаторов, и вы не получите ошибку в своем объявлении.

Но в режиме соответствия с флагом компилятора /permissive- эти токены считаются ключевыми словами со стандартным значением и поэтому не являются доступны как идентификаторы.

Я предлагаю не использовать not в качестве идентификатора, даже если не используется режим соответствия, потому что это делает ваш код нестандартным и непереносимым.

см. https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance

и Почему VS не определяет альтернативные токены для логических операторов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...