当我尝试使用带有/std:c++latest
标志的MSVC2015构建boost时出现错误:
boost\algorithm\string\detail\case_conv.hpp(33): error C2143: syntax error: missing ',' before '<'
指向:
// a tolower functor
template<typename CharT>
struct to_lowerF : public std::unary_function<CharT, CharT>
现在这似乎是由于这里提到的N4190:https://www.visualstudio.com/en-us/news/releasenotes/vs2015-update3-vs
/ std:c ++ latest还控制了以下旧版本的删除 功能:N4190“删除auto_ptr,random_shuffle()和旧东西”, P0004R1“删除过时的Iostreams别名”,LWG 2385 “function :: assign allocator参数没有意义”,各种各样 非标准功能(std :: tr1命名空间,仅限TR1 机器,以及std :: identity struct)。
使用时:
std::string a,b;
return boost::iequals(a,b);
使用boost::ilexicographical_compare
。
这里也提到了:
https://blogs.msdn.microsoft.com/vcblog/2015/06/19/c111417-features-in-vs-2015-rtm/
机器,它将减少非专家用户之间的混淆。的(对于 例如,不必要的unary_function / binary_function继承 常见的,因为很多用户都认为是STL算法/容器 需要这个,实际上只有过时的适配器。)和 auto_ptr特别不安全,因为它的变异“复制” 构造函数默默地从左值移动。Stephan T. Lavavej - MSFT Azarien: Removing auto_ptr/etc. will have positive consequences. It will prevent new code from using outdated/complicated/unsafe
那么如何使用VC2015的/ std:c ++最新版进行编译?现在看来,boost不兼容C ++ 17吗?
答案 0 :(得分:9)
在包含任何标头之前定义宏_HAS_AUTO_PTR_ETC
。对于您自己的代码,如果您使用的是Visual Studio的构建系统,最好通过项目的Preprocessor Definitions setting来完成。要构建Boost,请在define=_HAS_AUTO_PTR_ETC
/ b2
调用中添加bjam
。
/std:c++latest
隐式禁用的其他先前标准功能可以通过定义宏_HAS_FUNCTION_ASSIGN
,_HAS_OLD_IOSTREAMS_MEMBERS
和_HAS_TR1_NAMESPACE
来控制。以下博客文章中概述了这些宏:
STL Fixes In VS 2015 Update 3
VS 2015 Update 2’s STL is C++17-so-far Feature Complete