boost::log 1.66.0。 boost 教程中 set_filter 的参数是错误的
boost::log 1.66.0. Argument for set_filter from boost's tutorial is wrong
我将学习 boost::log 使用 Boost 1.66.0 和 VS 2017 的库教程。
从一开始就解决问题:
void init()
{
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}
错误:
没有运算符“>=”匹配这些操作数...
它看起来合法——第一个操作数是一个没有定义任何比较运算符的结构(包括 public base class。我是不是错过了一些免费功能?)。第二个操作数是枚举。
我的问题是它以前是如何工作的?
示例代码没有错误,可以测试编译运行,完整代码见libs/log/example/doc/tutorial_trivial_flt.cpp
过滤器表达式中的第一个参数是一个关键字,也是一个Boost.Phoenix终端。它使过滤器表达式构建一个 Boost.Phoenix 函数对象,而不是立即评估比较。因此,比较运算符取自 Boost.Phoenix(boost/phoenix/operator/comparison.hpp
,它由 boost/log/expressions.hpp
通过 boost/phoenix/operator.hpp
包含)。
我将学习 boost::log 使用 Boost 1.66.0 和 VS 2017 的库教程。 从一开始就解决问题:
void init()
{
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}
错误:
没有运算符“>=”匹配这些操作数...
它看起来合法——第一个操作数是一个没有定义任何比较运算符的结构(包括 public base class。我是不是错过了一些免费功能?)。第二个操作数是枚举。
我的问题是它以前是如何工作的?
示例代码没有错误,可以测试编译运行,完整代码见libs/log/example/doc/tutorial_trivial_flt.cpp
过滤器表达式中的第一个参数是一个关键字,也是一个Boost.Phoenix终端。它使过滤器表达式构建一个 Boost.Phoenix 函数对象,而不是立即评估比较。因此,比较运算符取自 Boost.Phoenix(boost/phoenix/operator/comparison.hpp
,它由 boost/log/expressions.hpp
通过 boost/phoenix/operator.hpp
包含)。