I get an error <: cannot begin a template argument list on g++ compiler. Code
template<typename T> class SomeClass;
class Class;
SomeClass<::Class>* cls;
I get an error <: cannot begin a template argument list on g++ compiler. Code
template<typename T> class SomeClass;
class Class;
SomeClass<::Class>* cls;
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
Try the following instead:
SomeClass< ::Class>* cls;
You can find more info in this question about digraphs. This question about trigraphs could be helpful also.
Put spaces around the < characters:
SomeClass < ::Class > * cls;
You only actually need to separate < and :, but I like symmetry.