This syntax
using sysTrajectory::sysTrajectory;
Names all constructors of sysTrajectory
. This syntax
using sysTrajectory::sysTrajectory<Real>;
Names only a constructors that accept a template argument <Real>
(yes, you can do that, you can pass explicit template arguments to constructors in declarative contexts). Your base class does not appear to have any constructor templates, so your compiler's parser does not take sysTrajectory
as a template-name and hence does not accept the <
as an opening template argument list. Hence the syntax error.
For a template-name to be explicitly qualified by the template arguments, the name must be known to refer to a template.
Even if you had a constructor template, a rule for using declarations forbids that too. It says
A using-declaration shall not name a template-id.