Предупреждения компилятора класса g ++ C ++ 0x - PullRequest
8 голосов
/ 17 марта 2010

Я рефакторинг своего ужасного беспорядка в псевдо-перечислениях C ++ с безопасным типом к новым перечислениям C ++ 0x с безопасным типом, потому что они способ более читабельны. В любом случае, я использую их в экспортируемых классах, поэтому я явно отмечаю их для экспорта:

enum class  __attribute__((visibility("default"))) MyEnum : unsigned int
{
    One = 1,
    Two = 2
};

Компиляция с помощью g ++ выдает следующее предупреждение:

атрибуты типа игнорируются после того, как тип уже определен

Это кажется очень странным, поскольку, насколько я знаю, это предупреждение предназначено для предотвращения реальных ошибок, таких как:

class __attribute__((visibility("default"))) MyClass { };
class __attribute__((visibility("hidden")))  MyClass;

Конечно, я явно не делаю этого, так как я пометил атрибуты видимости только при определении enum class, и я не переопределяю и не объявляю его где-либо еще (я могу продублировать эту ошибку с помощью один файл).

В конечном счете, я не могу заставить этот кусочек кода на самом деле вызвать проблему, за исключением того факта, что, если я изменю значение и перекомпилирую потребителя без повторной компиляции разделяемой библиотеки, потребитель передает новые значения и разделяемая библиотека не знает, что с ними делать (хотя я не ожидаю, что это сработает в первую очередь).

Я слишком педантичен? Можно ли это безопасно игнорировать? Я подозреваю, что так, но в то же время наличие этой ошибки не позволяет мне скомпилировать с Werror, что делает меня неудобным. Мне бы очень хотелось, чтобы эта проблема исчезла.

Ответы [ 2 ]

5 голосов
/ 16 января 2015

У меня это работает с g ++ 4.8.2 следующим образом:

enum class MyEnum : unsigned int
__attribute__((visibility("default")))
{
    One = 1,
    Two = 2
};

(изменить позицию декларации attribute)

4 голосов
/ 17 марта 2010

Вы можете передать флаг -Wno-attributes, чтобы отключить предупреждение.

(это, вероятно, ошибка в gcc?)

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