1) templ<Bar> is completely unrelated to templ<Foo>, even if Foo and Bar are in an inheritance relationship. There can be no conversion between the two that is not explicitly specified by the template.

2) You cannot const_cast between different types. Only between cv-qualified versions of one type.

3) You cannot cast an object to a pointer type. Especially not with const_cast.

4) Casting between Gregorian and Julian calenders does not make sense. You can perhaps convert between them, but it would be a really bad idea to have the conversion implicit.