可能重复:
For nested templates, when did `>>` become standard C++ (instead of `> >`)?
Why did templates of templates (e.g. vector<vector<int> >) require a space between the closing angle brackets prior to C++0x?
我只是想创建一个向量:
vector<Transform3D<double>> tempVector;
这是我得到的编译错误:
/../main.cpp:34:26: error: a space is required between consecutive right angle brackets
(use '> >')
vector<Transform3D<double>> tempVector;
^~
> >
没有意义的是,为什么通过将矢量更改为错误来解决问题:
vector<Transform3D<double > > tempVector;
为什么vector<Transform3D<double>>
和vector<Transform3D<double > >
不相同?
答案 0 :(得分:2)
它们不相同(至少在C ++ 11之前),因为最后>>
个字符被解析为单个运算符(operator>>
)。在它们之间放置一个空格会导致预期的行为。
同样的情况发生在编译器将<:
解析为tigraph / digraph的开头的情况。例如:
N<::T> // <: parsed as [
分隔运算符的空格使代码正常工作。
答案 1 :(得分:1)
因为>>
是一个位移运算符,所以较新的编译器可以区分这两者。