版本 1.60.0
版本 1.60.0
2015年12月17日 15:52 格林尼治标准时间
平台 | 文件 |
---|---|
unix | boost_1_60_0.tar.bz2 |
boost_1_60_0.tar.gz | |
windows | boost_1_60_0.7z |
boost_1_60_0.zip |
新增库
-
VMD: 来自 Edward Diener 的可变参数宏数据库。
更新的库
-
原子操作:
-
强制执行
atomic<>
存储的正确对齐。这应该可以修复在支持对大于原生字大小的数据单元进行原子操作的平台上可能出现的问题。这也可能会更改具有atomic<>
成员的用户数据结构的二进制布局。 -
修复了使用 IBM XL C++ 编译器在 PowerPC 上的编译问题。修正了 PowerPC 汇编程序中的内存屏障。
-
修复了使用 MSVC-8 编译 ARM 代码的问题。
-
修复了在使用 128 位原子操作时,使用 gcc 4.4 编译 x86-64 代码的问题。(#10994)
-
优化了一些 gcc x86/x86-64 汇编代码块以减少使用的寄存器数量。这可能需要 binutils 2.10 或更高版本。
-
-
Chrono - 2.0.5:
-
修复
-
#10778 VC14 CTP4 原子操作无法与不是 TriviallyCopyable 的 boost::chrono 时长一起编译
-
#10840 test_7868.cpp 中缺少对 puts 调用的 std::限定符
-
#10851 time_point_output.cpp 中缺少对 puts 调用的 std::限定符
-
#10893 Boost.Chrono 中的轻微文档错别字
-
#10992 Chrono IO 状态保存器与 Boost.IO 状态保存器不一致
-
#10995 duration_put::put_value 截断小数部分
-
#11006 由于多个错误,无法实例化 time_fmt_io_saver。
-
#11012 chrono_io v2 无法与 boost::chrono::duration< boost::rational<int> > 一起编译
-
-
-
容器:
-
实现了多态内存资源。
-
向某些操作(例如
pop_back
、pop_front
、back
、front
等)添加了更多 BOOST_ASSERT 检查以测试前提条件。 -
向
basic_string
添加了 C++11back
/front
操作。
-
-
核心:
-
在符号反混淆工具中,添加了对 Android NDK 中使用的 gabi++ ABI 实现的支持。
-
添加了一个新的
enable_if_has_type
工具,用于执行嵌套类型存在的 SFINAE 检查。
-
-
文件系统:
-
新特性
-
添加了函数
lexically_normal
、lexically_relative
、relative
和weakly_canonical
。非常感谢 Jamie Allsop 的帮助和坚持。解决了工单#1976、#5897、#6249。 -
如果编译器支持,则提供 C++11
noexcept
,如文件系统 TS 中所指定。 -
如果编译器支持,则提供 C++11 移动构造函数和移动赋值运算符,如文件系统 TS 中所指定。解决了#10291。
-
现在支持文件系统 TS 中名称已更改的现有函数的旧名称和新名称。
-
-
工单
-
修复#11733,通过应用来自 Idar Tollefsen 的补丁修复 boost/libs/filesystem/src/unique_path.cpp 中缺少 unistd.h 包含的问题。
-
修复#5706,通过应用 Sebastian Redl 的pull request #15 来修复
unique_path
中的竞争条件,从而修复了临时用户配置文件中 unique_path 在 Windows 上失败的问题。 -
修复#10591,通过应用 Daniel Seither 提交的补丁修复 boost::filesystem 无法在 iOS 8 上构建的问题。
-
修复#9454,通过应用 Makesim 提交的补丁修复定义 BOOST_FILESYSTEM_NO_DEPRECATED 时 Boost Filesystem [库构建] 无法编译的问题。
-
修复#11447,通过应用 Jasper Lievisse Adriaanse 提交的补丁修复
__OpenBSD__
宏名称拼写错误的问题。 -
修复#11288,通过应用 Yevhen Ivannikov 提交的补丁修复避免冗余字符串分配的问题。
-
解决#11175,过时的文档导致用户错误地预期该库可以与禁用异常一起使用。
-
通过减轻(即降低可能性)
remove()
中可能的外部文件系统竞争来解决#11166。 -
修复#7258,如果路径以斜杠结尾,
create_directories
将返回 false。如果路径包含点或点号元素,则还修复相关问题,并向测试套件添加了测试用例。 -
解决#10766,通过向参考文档添加示例和说明来解释为什么返回的值实际上是正确的,并提供该行为的理由,从而解决了带有冗余分隔符的
parent_path()
返回错误值的问题。请参阅path.itr和path.decompose参考文档中parent_path()
和filename()
部分。
-
-
其他修复
-
清除一些虚假的 GCC 警告。
-
修复
file_status
和recursive_directory_iterator
中的错误:C++ 将除第一个之外所有参数都默认为显式构造函数转换为非显式单参数构造函数。 -
应用参考文档编辑清理:使用与文档其余部分相同的样式表。调整制表符字体大小。修复表中过长的行,提纲。
-
次要修复,包括来自 Jonathan Wakely 和 Marcel Raad 的拉取请求。
-
-
-
轻量级:
-
维护修复。
-
-
融合:
-
所有融合容器和生成器现在都支持 C++11 可变参数模板。(pull-request 89、pull-request 97、pull-request 100)
-
fusion::vector
的特别说明-
由于实现限制,编号形式(即
fusion::vectorN
)是通过 C++11 别名模板提供的,在 C++11 或更高版本中已弃用。在这种情况下,您应该检查BOOST_FUSION_HAS_VARIADIC_VECTOR
宏并切换使用方法,因为某些局部特化将成为编译错误(例如Spirit 的 pull-request)。
-
-
-
fusion::nview
现在支持 C++11 可变参数模板。(pull-request 90) -
fusion::fold
现在是 SFINAE 友好的。(pull-request 102)
-
-
几何:
-
错误修正
-
修复接触内环/外环的共位点,它也接触另一个多边形。
-
修复从空 rtree 中删除值 - 无效且返回 0 而不是断言失败。
-
修复包含空单个几何图形的多几何图形的质心中的段错误(感谢 Jiri Drbalek)。
-
修复整数坐标的 liang_barsky 策略(感谢 Dane Springmeyer)。
-
-
进程间通信:
-
改进了
offset_ptr
的性能并删除了任何未定义的行为。不需要针对不同的编译器进行特殊处理。
-
-
侵入式:
-
有序关联容器中的高级查找和插入现在支持不需要提供与
key_compare
相同的严格弱排序的比较函数,容器必须根据传递的比较对象进行分区。
-
-
区域设置:
-
实现了通用的codecvt facet并添加了通用的utf8_codecvt facet
-
为FreeBSD 10.0及以上版本添加了POSIX区域设置支持
-
一些警告清理
-
修复了最新ICU版本的测试
-
添加了针对
libc++
问题的解决方法 -
添加了新的定义
BOOST_LOCALE_ENABLE_CHAR16_T
和BOOST_LOCALE_ENABLE_CHAR32_T
,以启用C++11的char16_t
和char32_t
,而不是已弃用的类型
-
-
日志:
-
一般性更改
-
在Windows上,库不再使用配置宏
BOOST_LOG_USE_WINNT6_API
。应通过定义宏BOOST_USE_WINAPI_VERSION
来配置目标Windows版本。
-
-
错误修复
-
修复了使用Google NDK进行Android编译的问题。(#11559)
-
修复了一些日志语句的编译问题,其中第一个放入流的对象不受
formatting_ostream
直接支持。(#11549) -
添加了针对Solaris Studio 12.4的解决方法,这应该可以修复
formatting_ostream
的编译问题。(#11545) -
修复了禁用原生
wchar_t
类型时的编译问题。(#11541) -
修复了在类POSIX系统上从
boost_log_setup
库导出符号的问题。 -
修复了字符装饰器的编译问题。
-
添加了针对文本文件接收器后端中文件名生成不正确的解决方法,当文件名包含日期/时间占位符时。(#11691)
-
-
查看变更日志了解更多详情。
-
-
odeint:
-
新功能
-
添加了如果执行了过多的ODE步骤则抛出异常的功能。
-
添加了限制自适应方法中最大步长的可能性。
-
-
一些错误修复,请参见 https://github.com/headmyshoulder/odeint-v2/issues
-
-
线程 - 4.6.0: 新的实验性功能:
-
#11231 允许将延续future的析构函数行为设置为非阻塞
-
#11424 提供shared_timed_mutex作为shared_mutex的替代名称,并弃用将shared_mutex用作计时互斥锁
-
#11734 future::then(Cont)应该能够在不确定的线程上执行延续
-
#11736 允许在future::then(launch::executor, cont)上使用launch::executor
-
#11737 添加一个launch::inherit策略,可以在::then()上使用它来使用父future的策略 已修复的错误:
-
#3926 thread_specific_ptr + dlopen库会导致SIGSEGV。
-
#6377 更改时间时条件变量阻塞
-
#6787 如果系统时间回滚,boost::thread::sleep()挂起
-
#7665 this_thread::sleep_for不再在线程中使用steady_clock
-
#7720 大量锁定/解锁互斥锁时出现异常lock_error
-
#9309 test_latch在clang-darwin-tot11上经常失败
-
#10788 Windows平台小于或等于0x0502时GetLogicalProcessor不可用
-
#11090 ex_future_unwrap- ThreadSanitizer:锁顺序反转(潜在死锁)
-
#11158 使用faketime时Pthread线程死锁
-
#11174 带有谓词的boost::condition_variable::timed_wait意外唤醒,而应该无限等待
-
#11185 URL重定向不正确
-
#11192 当回调返回future时,带有执行器的boost::future<>::then()无法编译
-
#11250 由make_exceptional创建的future在其析构函数中断言失败
-
#11256 在延续函数中future<>::is_ready() == false
-
#11261 basic_thread_pool中不正确地使用了作用域线程
-
#11262 shared_state_nullary_task中不正确地使用了直接指针
-
#11263 锁已锁定
-
#11266 boost::packaged_task具有无效的变参签名
-
#11302 使用BOOST_THREAD_PATCH时boost线程无法构建。
-
#11322 sleep_for()纳秒重载在Windows上总是返回过早
-
#11329 使用声明式GetProcessHeap……失败
-
#11368 boost线程对CreateWaitableTimer的使用会唤醒PC睡眠(doh)
-
#11377 Boost条件变量总是等待系统时钟截止日期
-
#11435 future.hpp中的gcc编译器警告
-
#11555 devector.hpp假定allocator_traits_type始终存在
-
#11562 在Ubuntu 64位系统上,计算机时间向前设置后,定时器(使用steady_clock)过期
-
#11672 线程:应该使用unique_ptr,而不是auto_ptr
-
#11688 thread::try_join_until:如果系统时钟更改,避免繁忙等待
-
#11716 ::then(f)应该继承父执行器
-
-
UUID:
-
添加了针对MSVC代码生成错误的解决方法,该错误可能在比较UUID时导致崩溃。
-
添加了使用MSVC编译器开关启用AVX的检测。
-
新闻
Windows用户注意事项
此版本的Boost默认情况下将为Windows Vista/Windows Server 2008编译,如果编译器支持足够新的Windows SDK,否则为Windows XP。使用默认选项编译的二进制文件可能无法在较旧的Windows版本上运行。
仍然可以通过将BOOST_USE_WINAPI_VERSION
定义为Windows API的数字版本来显式指定目标Windows版本。例如,可以使用以下命令为Windows XP构建Boost
b2 release define=BOOST_USE_WINAPI_VERSION=0x0501
可以在此页面上看到Windows API版本号列表。
此更改仅涉及使用通用Windows API抽象层的库。目前,这些库是:Boost.Chrono、Boost.Dll、Boost.Log、Boost.UUID。这也会影响所有依赖库。
Boost.DLL库的发行版推迟
为了提供对非常用工具集和平台的更好支持,Boost.DLL的发行版推迟到Boost的后续发行版。这也允许更好地测试最近添加的复制构造和复制赋值boost::dll::shared_library
实例的能力,并提供使用非默认调用约定的导入函数的示例。可以在GitHub仓库中找到最新版本和库的开发者文档。
测试过的编译器
Boost的主要测试编译器是
-
Linux
-
Clang:3.4、3.6
-
Clang,C++14:3.7
-
GCC:4.4.7、4.8.4、4.9.3、5.1.0、5.2.1
-
GCC,C++11:4.4.7
-
GCC,C++14:4.9.3
-
-
Windows
-
GCC,C++03,mingw:3.4.5
-
GCC,C++11,mingw:4.6.4、4.7.3、4.8.1
-
GCC,C++14,mingw:4.9.3、5.1.0
-
Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0
-
-
Android
-
Clang:3.6、3.7
-
GCC:4.9.0、5.2.0
-
-
QNX
-
QCC:4.4.2
-
-
SunOS
-
Oracle Solaris Studio:12.4、12.5
-
Boost的其他测试编译器包括
-
Linux
-
Clang:3.0、3.1、3.2、3.3、3.4.2、3.6.0、3.8.0
-
Clang,C++14:3.7.0
-
GCC:4.4.7、4.5.3、4.6.4、4.7.3、4.8.1、4.9.3、5.1.0、6.0.0
-
GCC,C++11:4.4.7
-
GCC,C++14:4.9.3、5.2.1
-
IBM XL C++:13.1.2.0
-
Intel:16.0
-
-
OS X
-
Clang:7.0.0
-
GCC:5.2.0
-
-
Windows
-
GCC,C++03,mingw:3.4.5
-
GCC,C++11,mingw:4.7.3、4.8.1
-
GCC,C++14,mingw:4.9.3、5.1.0
-
Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0
-
-
Android
-
Clang:3.6、3.7
-
GCC:4.9.0、5.2.0
-
-
FreeBSD
-
Clang,C++11:3.4.1、3.7.0
-
GCC,C++11:4.8.5、5.2.0、6.0.0
-
-
QNX
-
QCC:4.4.2
-
-
SunOS
-
Oracle Solaris Studio:12.4、12.5
-
鸣谢
Beman Dawes、Eric Niebler、Rene Rivera、Daniel James、Vladimir Prus和Marshall Clow负责此版本的发布。