这编译:
std::map<int, std::vector<int> > vDescriptorAtom;
这:
std::map<int, std::vector<int>> vDescriptorAtom;
给出以下错误:
src/MessageHandler.cpp:191: error: >> should be > > within a nested template argument list
这显然是因为>>是一个运算符。但是看看 GCC 抛出的错误,我无法理解它想说什么。“嵌套模板参数列表”是什么意思。谢谢。
外括号 (1) 之间的内容是std::map模板的模板参数列表
std::map<int, std::vector<int>>
// (1) ^ ^
// (2) ^ ^
Run Code Online (Sandbox Code Playgroud)
内部对 (2) 是模板的模板参数列表std::vector,它嵌套在第一个对中,这就是错误所说的内容。
>>在 C++11 之前,末尾之间必须有空格,以使解析器的工作更轻松(正如您所观察到的,它将被解释为右移运算符)。无论如何,许多编译器都努力正确地解析它,以便给出有意义的错误消息,证明这并非不可能。我想这就是 C++11 中放宽此限制的原因之一。