The serialization library includes a mix of classes which use
both static polymorphism (CRTP) and dynamic
polymorphism via virtual functions. smart_cast
was written to address the more problematic manifestations of the
situation exmplified above.

but the same functionality is supported the the following special syntax

smart_cast_reference<Target &&gt(Source & s)

Requirements

smart_cast can be used only on compilers that support partial
template specialization or on types for which have be specified with the
macro
BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(<type>)
has been applied.