Как я могу гарантировать, что Visual C ++ не разрешает доступ к enum в области? - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть кодовая база C ++, которая скомпилирована с использованием различных версий GCC и Visual Studio (2017).Некоторые из наших программистов (с фонами C #) имеют тенденцию полностью определять имя перечисления (например, ClassName::EnumName::EnumValue против правильного ClassName::EnumValue).Visual Studio, кажется, подходит для этого использования (хотя перечисление не определено как enum class, для C ++ 11), но GCC (правильно) выдает ошибки.

Что я могу сделать, чтобы сделать VisualСтудия выдает ошибки, подобные GCC, в данном случае?

Редактировать: я должен отметить, что версия GCC, которую мы требуем, имеет тенденцию быть довольно старой (до 6.1)

1 Ответ

0 голосов
/ 17 сентября 2018

Вы не сможете заставить MSVS вызвать ошибку компилятора. С введением перечислений с ограниченным диапазоном стало законным ссылаться на перечисление без ограниченного объема, используя имя перечисления. Это означает, что ClassName::EnumName::EnumValue и ClassName::EnumValue являются допустимыми в C ++ 11 и выше.

MSVC 2017 поддерживает только /std:[c++14|c++17|c++latest] для компиляции его стандарта C ++, поэтому всегда будет ClassName::EnumName::EnumValue.

Это, вероятно, приведет к дополнительным проблемам, если вы не собираетесь компилировать с C ++ 14 с другими вашими компиляторами, поскольку специалисты MSVS могут использовать другие функции C ++ 14 и выше, которые не компилируются в C ++ 98/03 /11.

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