It often happens to me to have a a container C (or whatever kind of wrapper class, even smart pointers) for a type T1, and want to convert such
C
T1
This is generally difficult. The problem becomes apparent when considering template specialization, for instance the infamous vector, which has an implementation that differs from a vector in much more than just the argument type.
vector