Loo*_*oom 40 c++ tuples variadic-templates c++11 visual-studio-2012
我正在尝试使用Visual C++ 11构建googletest,但是下面的代码会导致错误
template <typename T1, typename T2, typename T3, typename T4, typename T5,
typename T6, typename T7, typename T8, typename T9>
void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t, // <-- error C2977
::std::ostream* os) {
PrintTupleTo(t, os);
}
Run Code Online (Sandbox Code Playgroud)
这是一个错误文本:
f:\gtest-1.6.0\include\gtest\gtest-printers.h(550): error C2977: 'std::tuple' : too many template arguments
c:\program files (x86)\microsoft visual studio 11.0\vc\include\utility(72) : see declaration of 'std::tuple'
Run Code Online (Sandbox Code Playgroud)
并且有utility
-file 的第72行:
template<class = _Nil, _MAX_CLASS_LIST>
class tuple; // Line 72
Run Code Online (Sandbox Code Playgroud)
有什么问题std::tuple
以及如何解决?
(顺便说一句:我曾尝试改变std::tr1::tuple
到std::tuple
)
jms*_*msu 56
在msdn博客中查看此条目.VC++ 11不支持可变参数模板.他们有一些他们称为人造变种的东西.向下滚动,你会看到一个关于Faux variadics的段落,它讨论了元组.在该段落上,他们说默认的最大参数数量为5.您可以将其增加到10:
您可以在5到10之间的项目范围内定义_VARIADIC_MAX(默认为5).增加它会使编译器消耗更多内存,并且可能需要使用/ Zm选项为PCHes保留更多空间.
他们说他们有一个修复传入,再次使默认值为10.
Jic*_*hao 32
在Visual Studio 2012(VC11)_VARIADIC_MAX
中,默认情况下在头文件中定义为5 <xstddef>
:
#if !defined(_VARIADIC_MAX)
#define _VARIADIC_MAX 5
#elif _VARIADIC_MAX < 5 || 10 < _VARIADIC_MAX
#error _VARIADIC_MAX must be between 5 and 10, inclusive
#endif /* !defined(_VARIADIC_MAX) */
Run Code Online (Sandbox Code Playgroud)
如果您<tuple>
在解决方案中包含多个VC11项目,则最好将宏设置为all
1)按住Shift键以选择解决方案中的所有C++项目
2)属性,C/C++,预处理器,所有配置所有平台,预处理器定义, <Edit>
3)<different options>
连续添加
_VARIADIC_MAX=10;
Run Code Online (Sandbox Code Playgroud)
您可以将10更改为6~10中的任意数字.
Dmi*_*sov 10
在我的情况下,在gtest.h中设置GTEST_HAS_TR1_TUPLE
为0 有帮助
更新:当然,较少侵入的方法是定义预编译器标志GTEST_HAS_TR1_TUPLE = 0.检查答案_VARIADIC_MAX=10
- 解决另一半问题.
归档时间: |
|
查看次数: |
24342 次 |
最近记录: |