C++ Boost 1.53本地日期时间编译器错误,带有-std=c++;0x

C++ Boost 1.53本地日期时间编译器错误,带有-std=c++;0x,c++,boost,c++11,g++,C++,Boost,C++11,G++,使用g++版本4.7.2,如果我尝试编译以下内容 #include <boost/date_time/local_time/local_time.hpp> class Bar { public: Bar() { tz_db_.load_from_file("/home/date_time_zonespec.csv"); } private: boost::local_time::tz_database tz_db_; }; int main() { retu

使用g++版本4.7.2,如果我尝试编译以下内容

#include <boost/date_time/local_time/local_time.hpp> 

class Bar
{
public:

Bar() { tz_db_.load_from_file("/home/date_time_zonespec.csv"); }

private:
    boost::local_time::tz_database tz_db_;
};

int main()
{
    return 0;
}
#包括
分类栏
{
公众:
Bar(){tz_db_u.load_from_文件(“/home/date_time_zonespec.csv”)}
私人:
boost::local_time::tz_数据库tz_db;
};
int main()
{
返回0;
}
对于-std=c++0x,我得到以下错误

In file included from /usr/local/include/boost/date_time/local_time/local_time_types.hpp:18:0,
                 from /usr/local/include/boost/date_time/local_time/local_time.hpp:13,
                 from test.h:4,
                 from test.cpp:1: /usr/local/include/boost/date_time/local_time/custom_time_zone.hpp: In instantiation of ‘bool boost::local_time::custom_time_zone_base<CharT>::has_dst() const [with CharT = char]’: test.cpp:11:1:   required from here /usr/local/include/boost/date_time/local_time/custom_time_zone.hpp:67:30: error: cannot convert ‘const boost::shared_ptr<boost::date_time::dst_day_calc_rule<boost::gregorian::date>
>’ to ‘bool’ in return
在/usr/local/include/boost/date\u time/local\u time/local\u time\u types包含的文件中。hpp:18:0,
从/usr/local/include/boost/date\u time/local\u time/local\u time.hpp:13,
从测试h:4开始,
来自test.cpp:1:/usr/local/include/boost/date\u time/local\u time/custom\u time\u zone.hpp:“bool boost::local\u time::custom\u time\u zone\u base::has_dst()const[带CharT=char]“:test.cpp:11:1:此处需要/usr/local/include/boost/date\u time/local\u time/custom\u timeu\u zone。hpp:67:30:错误:无法将“const boost::shared\u ptr”转换为“bool”
如果我不使用c++0x选项,一切都很好。
有人能告诉我这里发生了什么吗?

当您为C++11构建时,
boost::shared\u ptr::operator bool()
被声明为
explicit
。这通常是一件好事,但不幸的是,它破坏了依赖隐式转换的代码,例如此函数(这是导致错误的原因):

其中,
dst_calc_规则
是一个
共享的ptr

在Boost有人抽空修理之前,你可以做两件事:

  • 使该函数返回布尔值(dst_calc_rules)
  • 定义
    BOOST\u NO\u CXX11\u显式\u转换\u运算符
    以允许隐式转换

中的:
智能指针现在在C++11编译器上使用显式运算符bool。这可能会中断将智能指针传递给接受bool的函数的代码,或从具有bool返回类型的函数返回智能指针的代码。请使用p!=0或!!p在这种情况下它在1.54中仍然没有修复,但是有一个很好的解决方案。
virtual bool has_dst() const
{
  return (dst_calc_rules_); //if calc_rule is set the tz has dst
}