【发布时间】:2016-09-20 11:29:42
【问题描述】:
我以http://www.boost.org/doc/libs/1_61_0/libs/log/example/doc/tutorial_trivial_flt.cpp 为例,添加了位域打印:
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
namespace logging = boost::log;
//[ example_tutorial_trivial_with_filtering
void init()
{
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}
struct BF {
unsigned int b : 8;
BF() : b(0) {}
};
int main(int, char*[])
{
init();
BF bf;
BOOST_LOG_TRIVIAL(info) << "An informational severity message " << bf.b;
return 0;
}
//]
使用 boost 1.61 时出现编译错误:
无法将位域 'bf.BF::b' 绑定到 'unsigned int&'
使用 boost 1.57 编译并运行代码(打印:[2016-09-19 20:21:33.018112] [0x000007fd1d5be672] [info] 信息严重性消息 0)
注意:
- cout 当然可以处理这个问题(所以我认为这不仅仅是一个向后兼容性问题,而是一个错误)
- boost 1.61 可以处理 const 位域,例如
BOOST_LOG_TRIVIAL(info) << "An informational severity message " << BF().b;
我正在寻找解决方法。 有什么建议吗?
【问题讨论】:
标签: c++ compiler-errors backwards-compatibility bit-fields boost-log