буст::журнал 1.66.0. Аргумент для set_filter из учебника boost неверен

Я прохожу учебник по библиотеке boost::log, используя Boost 1.66.0 и VS 2017. Проблема возникает в самом начале:

void init()  
{ 
  logging::core::get()->set_filter
  (
    logging::trivial::severity >= logging::trivial::info
  );
}

Ошибка: Ни один оператор ">=" не соответствует этим операндам... Это выглядит законно - первый операнд представляет собой структуру без каких-либо определенных операторов сравнения (включая общедоступный базовый класс. Я пропустил некоторые бесплатные функции?). Второй операнд - enum.
Мой вопрос: как это работало раньше?


person egor    schedule 27.12.2017    source источник
comment
Может быть, заголовки, которые определяют operator>=, должны быть включены отдельно?   -  person StaceyGirl    schedule 27.12.2017
comment
Я подозреваю, что это будет первая из многих проблем с ведением журнала Boost. Это не отличная библиотека - она ​​слишком сложна и не очень удобна для пользователя. Я бы порекомендовал либо поискать другую библиотеку ведения журналов, либо написать свою собственную. В конце концов, вы закончите тем, что сделаете одно из этих...   -  person Sean    schedule 27.12.2017


Ответы (1)


Пример кода не является неправильным, и вы можете проверить, что он компилируется и работает, см. libs/log/example/doc/tutorial_trivial_flt.cpp полный код.

Первым аргументом в выражении фильтра является ключевое слово, а также терминал Boost.Phoenix. Это заставляет выражение фильтра создавать объект функции Boost.Phoenix вместо немедленной оценки сравнения. Таким образом, оператор сравнения берется из Boost.Phoenix (boost/phoenix/operator/comparison.hpp, который включается через boost/phoenix/operator.hpp через boost/log/expressions.hpp).

person Andrey Semashev    schedule 28.12.2017
comment
Андрей, у вас хорошая библиотека. Что происходит, так это то, что редактор VS 2017 показывает проблему, но код компилируется и связывается просто отлично. Спасибо. - person egor; 28.12.2017
comment
Редакторы кода могут столкнуться с трудностями при анализе макросов и шаблонов, используемых в Boost.Phoenix и Boost.Proto, на основе которых построен Boost.Phoenix. К сожалению, я мало что могу с этим поделать. Некоторые IDE более умны (как правило, те, которые используют Clang/LLVM для поддержки внутренней модели кода, например, QtCreator). - person Andrey Semashev; 28.12.2017