ale*_*ind 7 c++ mutex libstdc++ gcc5 c++17
看看C++编译器支持,似乎std::shared_mutexGCC 5.0+中提供了不定时版本.但是,即使使用gcc version 5.3.0 20151204 (Ubuntu 5.3.0-3ubuntu1~14.04)和编译-std=c++1z,共享互斥锁的简单初始化最终会:
error: ‘shared_mutex’ in namespace ‘std’ does not name a type
std::shared_mutex mutex_;
Run Code Online (Sandbox Code Playgroud)
不,我已经包含了正确的标题:#include <shared_mutex>.
它找不到合适的标题,因为它似乎不存在.实际上,链接器使用的是locate at /usr/include/c++/5/shared_mutex,它只包含了实现std::shared_timed_mutex(如C++ 14标准).
我已经安装了gcc-5和g ++ - 5,通过添加存储库ppa:ubuntu-toolchain-r/test并使用它update-alternatives来正确设置它们的垃圾箱.
有没有什么可以使用最新的C++ 17标准正确编译我的代码?并且可能是一个要提出的愚蠢问题,但是-std=c++1z即使应该已经支持它,现在开始使用还为时过早吗?因为它受到支持,对吗?
Jon*_*ely 11
关于cppreference的混淆可能是因为std::shared_mutex真正被添加到GCC 5.0,修订版200134.但这是基于C++ 1y草案的那种类型的早期化身.实际上它是当时被调用的定时共享互斥锁 std::shared_mutex.
在最终发布的C++ 14标准被std::shared_mutex重命名std::shared_timed_mutex之前,所以在GCC 5.1发行版(这是5.x系列中的第一个版本)之前,libstdc ++中的类型被重命名,参见修订版207964.
因此,尽管在GCC 5.x预发布阶段期间有一种std::shared_mutex类型,但它不是C++ 17的非定时类型,并且在出现在GCC的任何正式版本之前它已被重命名.
然后,在GCC 6.x发布系列的开发过程中,添加了C++ 1z untimed共享互斥锁,重用了该std::shared_mutex名称.这是上面评论中修订版224158中提交TC的提交.
所以C++ 17 untimed shared_mutex从未出现在任何GCC 5.x版本中.在第一个5.x版本发布之前的一段时间里,有一个被调用的定时版本std::shared_mutex,但是在所有正确的5.x版本中它被称为std::shared_timed_mutex.
2016年4月,第一个发布C++ 17不定时版本的版本是6.1.
GCC 5于2015年发布,因此期望能够在该版本中使用C++ 17有点不切实际.GCC 6.x和7.x具有相当不错的C++ 1z支持(当然,仅基于发布时的当前草稿).
| 归档时间: |
|
| 查看次数: |
6483 次 |
| 最近记录: |