Boost:: system:: (...) _ определена, но не используется

В настоящее время я получаю предупреждения о компиляторе, которые напоминают предупреждение, которое я дал в заголовке вопроса. Предупреждения, такие как....

warning: 'boost::system::generic_category' defined but not used

warning: 'boost::system::posix_category' defined but not used

warning: 'boost::system::errno_ecat' defined but not used

warning: 'boost::system::native_ecat' defined but not used

Насколько я знаю, программа никоим образом не затрагивается. Тем не менее, мне не нравятся предупреждения, висящие вокруг, но я понятия не имею, что эти предупреждения пытаются сказать мне, кроме того, что что-то определенное и связанное с усилением висит вокруг, где-то не используется. Тем не менее, все, что я определил, я использовал. Библиотеки ускорения, которые я использую, представляют собой случайную библиотеку и библиотеку файловой системы.

Когда я проверяю источник предупреждения, он вызывает файл Boost error_category.hpp и выделяет некоторые static const, которые комментируются как "предопределенные категории ошибок" или "устаревшие синонимы". Может быть, проблема связана с моей обработкой ошибок (или отсутствием) при использовании библиотеки?

Может ли кто-нибудь дать представление о том, почему эти предупреждения появляются? Я что-то не хватает?

P.S. Предупреждения находятся на максимальном уровне.

Ответ 1

Это относится к библиотеке error_code в библиотеке Boost.System. Boost error_codes содержит два атрибута: значения и категории. Для того, чтобы сделать возможными расширения error_codes, чтобы пользователи библиотеки могли создавать свои собственные категории ошибок, разработчикам импульсов необходимо было каким-то образом представить уникальную категорию кода ошибки. Простой идентификационный номер не будет достаточным, поскольку это может привести к двум проектам, использующим конфликтующие идентификационные номера для пользовательских категорий ошибок.

Таким образом, в основном, они использовали адреса памяти в виде статических объектов, которые наследуются от базового класса error_category. Эти переменные фактически ничего не делают, кроме как служить уникальными идентификаторами определенной категории ошибок. Поскольку они представляют собой по существу статические фиктивные объекты с уникальными адресами в памяти, вы можете легко создавать свои собственные категории ошибок, которые не будут мешать другим идентификаторам категории ошибок. См. здесь для получения дополнительной информации.

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

Ответ 2

Я согласен с @Charles Salvia, но хотел добавить, что, по крайней мере, с Boost 1.44.0, эти определения теперь завернуты - исключаются как устаревшие. Поэтому, если вы не используете их, просто включите следующие строки, прежде чем включать заголовочный файл:

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif