需要帮助理解 GCC 给出的“在嵌套模板参数列表中”错误的含义

Cha*_*ani 2 c++ gcc stl

这编译:

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 抛出的错误,我无法理解它想说什么。“嵌套模板参数列表”是什么意思。谢谢。

jro*_*rok 5

外括号 (1) 之间的内容是std::map模板的模板参数列表

std::map<int, std::vector<int>>
// (1)  ^                     ^
// (2)                   ^   ^
Run Code Online (Sandbox Code Playgroud)

内部对 (2) 是模板的模板参数列表std::vector,它嵌套在第一个对中,这就是错误所说的内容。

>>在 C++11 之前,末尾之间必须有空格,以使解析器的工作更轻松(正如您所观察到的,它将被解释为右移运算符)。无论如何,许多编译器都努力正确地解析它,以便给出有意义的错误消息,证明这并非不可能。我想这就是 C++11 中放宽此限制的原因之一。

  • @downvoter 我想知道投反对票的原因,以便我可以改进答案。谢谢。 (2认同)