< ;:无法开始模板参数列表

< ;:无法开始模板参数列表

问题描述:

我收到一个错误&lt ;:不能在g ++编译器开始模板参数列表。代码

I get an error <: cannot begin a template argument list on g++ compiler. Code

template<typename T> class SomeClass;
class Class;

SomeClass<::Class>* cls;


根据最大Munch标记化原则有效的C ++标记必须收集/具有尽可能多的连续字符。

According to the Maximal Munch tokenization principle a valid C++ token must collect/have as many consecutive characters as possible.

<:有向图(符号 [)。

                           Digraph  Equivalent
                              <:          [
                              :>          ]
                              <%          {
                              %>          }
                              %:          #

所以 SomeClass< :: Class> * cls; $ c>被解释为 SomeClass [:Class> * cls; 这没有任何意义。

So SomeClass<::Class>* cls; is interpreted as SomeClass[:Class>* cls; which doesn't make any sense.

解决方案:在< 之间添加一个空格:

  SomeClass< ::Class>* cls;
            ^
            | 
           White Space