When you refer to a template that is a member of dependent type, you have to prepend it with a keyword template
. This is how the call to getResult
inside printStuff
should look
size_t value = a.template getResult<B>();
This is similar to using the keyword typename
when referring to nested typenames in a dependent type. For some reason, the bit about typename
with nested types is rather well-known, but the similar requirement for template
with nested templates is relatively unknown.
Note that the general syntax structure is a bit different though. The typename
is always put in front of the full name of the type, while template
is inserted in the middle.
Again, this is only necessary when you are accessing a template member of a dependent type, which in the above example would be A
in printStuff
. When you call foo.getResult<>
in main
the type of foo
is not dependent, so there's no need to include the template
keyword.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…