would only work if the "values" of T and OP are known.
I am tempted to do something like this to lessen the problem:
1 2
template<class T, class OP>
class ShortName : public LongNameWithManyNestedTemplateParameters<T,OP> {};
but, even I do not know why, it smells like a bad practice.
Any better suggestion?
I believe that solving this problem not only makes the code more readable, as shorter names are there, but it would also make it easier to modify. What, e.g., if long expressions like the ones above occur several times in the code and then I realise that I must change shared_ptr into scoped_ptr? there should be a way to do it once for all.
You are right about the last example because doing it that way will prevent you from calling any "LongNameWithManyNestedTemplateParameters" constructors which are not the default constructor (unless of course you decide to add the same constructors to the "ShortName" class that the "LongNameWithManyNestedTemplateParameters" class uses, but this is just hackish and wasteful).