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