boost::log 1.66.0. Аргумент для set_filter из урока boost неверен

Я собираюсь пройти обучение по Boost:: Log Library, используя Boost 1.66.0 и VS 2017. Получите проблему в самом начале:

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

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

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).

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