A< B , C<B> > a0((B()), (C<B>()));
With external parentheses, each argument can only be an expression, not a declaration.
You really need this to take place for one of the arguments, so that the entire string is not parsed as an expression. You can choose which ones or just do both.
Remember to write a comment along with code explaining that there is a good reason for the βextraβ parentheses, otherwise God knows that someone will come and delete them once in a βminorβ VCS commit.
source share