Как заставить замолчать "чей тип использует анонимное пространство имен [-Werror]" gcc версии 4.8.2

В одном из заголовочных файлов моего проекта следующая строка включена в inline метод

typedef boost::archive::iterators::transform_width<boost::archive::iterators::binary_from_base64<      boost::archive::iterators::remove_whitespace<std::string::const_iterator>>, 8, 6> Base64ToBin;

Когда я компилирую это с gcc 4.8.2, я получаю следующую ошибку:

ошибка: 'boost:: archive:: iterators:: remove_whitespace <__ gnu_cxx:: __ normal_iterator>>' имеет поле 'boost:: archive:: iterators:: remove_whitespace <__ gnu_cxx:: __ normal_iterator>>::', тип которого использует аноним пространство имен [-Werror]

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

1 ответ

Решение

Это похоже на правильное предупреждение. Поскольку код находится в заголовке, он будет включен из нескольких файлов, но анонимное пространство имен уникально для каждого файла. Это означает, что тип не имеет одинакового определения везде.

Решение: переместите соответствующий код в файл.cpp.

Другие вопросы по тегам