std :: tr1 with visual studio 2017

Des*_*ess 9 c++ tr1 visual-c++ c++17 visual-studio-2017

我有一些使用某些版本的Google GTest框架的C++代码.此代码用于使用Visual Studio 2015进行编译.我刚刚升级到VS2017,现在我收到一堆这样的错误:

error C2039: 'tr1': is not a member of 'std'
error C3083: 'tr1': the symbol to the left of a '::' must be a type
Run Code Online (Sandbox Code Playgroud)

在VS2017中使用std :: tr1需要一些编译器选项吗?

ild*_*arn 11

一种选择是重新启用TR1; 通过定义宏来做到这一点_HAS_TR1_NAMESPACE,正如本博客文章中简要提到的那样.如果您正在使用MSBuild项目,那么最好通过项目的预处理器定义设置来完成; 或者,如果您正在使用预编译的头,则通过在所述PCH的顶部定义它.

更好的选择是通过定义宏来通知GTEST你的编译器支持C++ 11 GTEST_LANG_CXX11到1包括任何GTEST头前; 然后它将使用std::tuple而不是std::tr1::tuple*.(GTest的C++ 11检测逻辑是面向的__cplusplus,尽管主要是C++ 11和C++ 14兼容,但VC++尚未更新.我想说这是GTest中的一个错误,因为它在整个配置中支持VC++逻辑.)

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