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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…