碎碎念:

新系统配置环境,发现gtest1.7.0编译不下去,依稀记得以前版本编译时候也是有些问题,不过借着"伟大数据库"里的热心人,还是解决了.

当然,这次的问题还是老样子.

可使用该贴的解决方法.

http://code.google.com/p/googletest/issues/detail?id=276

 


现象:

gtest-1.7.0 编译时报错:

d:\workspace\gtest-1.7.0\include\gtest\internal\gtest-tuple.h(791): error C3855: “std::tr1::tuple_element”: 模板 参数“_Idx”与声明不兼容

环境:

64bits windows7, MSVC2010.  

 

原因:

在STL中,tuple_element的第一个参数被声明为size_t,在gtest中定义时则使用的是int.

64位下的size_t比int大一些,此处不同的声明,导致了编译错误.

/* VC\include\utility */
template<size_t _Idx, class _Tuple> struct tuple_element;
/* gtest-1.7.0\include\gtest\internal\gtest-tuple.h */
template <int k, class Tuple> struct tuple_element { typedef typename gtest_internal::TupleElement< k < (tuple_size<Tuple>::value), k, Tuple>::type type; };

 

解决方法:

修改一下报错位置的代码,int => size_t

/* gtest-1.7.0\include\gtest\internal\gtest-tuple.h */
template <size_t k, class Tuple> struct tuple_element { typedef typename gtest_internal::TupleElement< k < (tuple_size<Tuple>::value), k, Tuple>::type type; };

编译成功.

 


另:

根据gtest issue276里的内容,这个问题貌似从1.4.0开始就一直存在着,不知道为什么就是没改动.难道是用size_t可能导致其他问题么?由于我个人只用到gtest里很简单的功能,因此不排除这种解决方法会导致其他问题.

posted on 2013-11-28 17:24  Athron  阅读(1219)  评论(0编辑  收藏  举报