[英]How to use tr1 with Visual Studio 2010 (tr1::function)?
[英]std::tr1 with visual studio 2017
我有一些 C++ 代码使用了某些版本的 Google 的 GTest 框架。 这段代码过去可以用 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
在 VS2017 中使用 std::tr1 是否需要一些编译器选项?
一种选择是重新启用 TR1; 通过定义宏_HAS_TR1_NAMESPACE
做到这_HAS_TR1_NAMESPACE
,正如这篇博客文章中简要提到的那样。 如果您使用的是 MSBuild 项目,那么最好通过项目的Preprocessor Definitions设置来完成; 或者,如果您使用的是预编译头,则通过在所述 PCH 的顶部定义它。
更好的选择是在包含任何 GTest 头文件之前通过将宏GTEST_LANG_CXX11
定义为1
来通知 GTest 您的编译器支持 C++11; 那么它将使用std::tuple
而不是std::tr1::tuple
*。 ( GTest 的 C++11 检测逻辑是__cplusplus
的,尽管大部分符合 C++11 和 C++14,但 VC++ 尚未更新。我会说这是 GTest 中的一个错误,因为它在整个过程中的其他地方都支持 VC++配置逻辑。)
* 更不用说其他 C++11 特性了,这就是为什么这是迄今为止更好的选择;-]
Googletest1.8.1 版修复了这个问题(结合 VS2017 15.8.5)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.