Я рефакторинг своего ужасного беспорядка в псевдо-перечислениях 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
, что делает меня неудобным. Мне бы очень хотелось, чтобы эта проблема исчезла.