This means that CreationPolicy must also be a template that accepts a single type parameter. You can think of it as a pattern equivalent to function pointers or callbacks.
As you can see in this example, CreationPolicy used with an argument:
CreationPolicy<SomeType>
This would not have been possible if CreationPolicy had not been declared as a "template template parameter" (yes, thatβs really what they are called.)
source share