<: cannot begin a template argument list

前端 未结 4 543
挽巷
挽巷 2020-12-14 19:07

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

template class SomeClass;
class Class;

SomeClass<::Cla         


        
4条回答
  •  无人及你
    2020-12-14 19:31

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

    <: is a digraph (an alternative representation of symbol [).

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

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

    Solution: Add a whitespace between < and :

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

提交回复
热议问题