是否可以标记“>>”而不是“>>”使用嵌套模板时Visual Studio中的错误?
示例代码:
void foo(std::vector<std::vector<double>>) {}
Visual C ++编译器(我正在使用VS10 / 2010)即使在警告级别4也没有抱怨,但在Unix和Linux编译器上构建失败并出现错误(ideone):
error: '>>' should be '> >' within a nested template argument list
是否可以将此标记为错误?
我希望在将代码尽可能多地发送到CI服务器之前确保我的代码没有这些微不足道的语法错误...
答案 0 :(得分:2)
使用GCC 4.8.1而不是Visual Studio 2010(MSVC10)的错误原因是前者默认不使用C ++ 11而后者默认使用它。能够在嵌套模板列表中使用>>
是C ++ 11的一项功能。要在GCC和Clang中使用C ++ 11功能,您需要将-std=C++11
标志作为最小值传递给编译器。
至于使用intellisense在Visual Studio中显示这个,我不相信这是可能的,因为不可能告诉MSVC编译到不同的ISO标准。
答案 1 :(得分:2)
C ++ 11使>>
使嵌套模板合法化。问题是VC ++ 2010实现(并且无条件地实现)C ++ 11的这一部分,但是你正在使用其他编译器,这些编译器要么没有在你所针对的版本中实现它,要么你没有启用它们的C + +11模式。
VC ++不支持模式,而是在实现它们时简单地启用一些语言规范。因此,您的解决方案是将VC ++编译器降级为不支持此功能的版本,或者在您要定位的其他编译器上升级或启用C ++ 11,以便这不是错误。
如果你不能做其中任何一个,如果你还没有使用自动构建系统,那么你可以设置一个以帮助更快地捕获这些兼容性错误。配置一个,以便一旦任何团队成员提交新代码,就会在您支持的所有平台上检查代码。
自动构建系统通常还允许用户直接从团队成员的工作目录中提供要在所有构建从服务器上检查的代码更改,而不是要求首先将代码提交到共享存储库。设置它与在每个支持的平台上直接进行初始开发一样好。