std :: tr1 with visual studio 2017

问题描述:

我有一些使用Google GTest框架某些版本的C++代码。使用此代码编译罚款与Visual Studio 2015年我刚刚升级到VS2017,现在我得到这样一堆错误:std :: tr1 with visual studio 2017

error C2039: 'tr1': is not a member of 'std' 
error C3083: 'tr1': the symbol to the left of a '::' must be a type 

是使用std :: TR1在VS2017需要一些编译器选项?

一种选择是重新启用TR1;通过定义宏_HAS_TR1_NAMESPACE来执行此操作,如this blog article中简要提及的那样。如果您使用的是MSBuild项目,那么最好通过项目的Preprocessor Definitions设置完成;或者如果您正在使用预编译头文件,请将其定义在PCH的顶部。

一个更好的选择是在包含任何GTest头文件之前,通过定义宏GTEST_LANG_CXX111来通知GTest您的编译器支持C++ 11;那么它将使用std::tuple而不是std::tr1::tuple *。 (GTest's C++11-detection logic is __cplusplus-oriented,虽然大多数C++ 11和C++ 14兼容,但VC++还没有更新。我想说这是GTest中的一个bug,因为它在整个配置逻辑中的其他地方支持VC++。)

*更不用说其他C++ 11功能,这就是为什么这是更好的选择; - ]

+0

谢谢。我选择了_HAS_TR1_NAMESPACE选项,它工作。 – Dess