| Home | Libraries | People | FAQ | More

## Synopsis

    namespace boost {

    // Throws: std::bad_cast if ( dynamic_cast<Derived>(x) == 0 )
    // Returns: dynamic_cast<Derived>(x)
    template <class Derived, class Base>
    inline Derived polymorphic_cast(Base* x);

    // Effects: assert( dynamic_cast<Derived>(x) == x );
    // Returns: static_cast<Derived>(x)
    template <class Derived, class Base>
    inline Derived polymorphic_downcast(Base* x);

    // Effects: assert( dynamic_cast<Derived>(&x) == &x );
    // Returns: static_cast<Derived>(x)
    template <class Derived, class Base>
    inline Derived polymorphic_downcast(Base& x);

    // Throws: std::bad_cast if ( dynamic_pointer_cast<Derived>(x) == 0 )
    // Returns: dynamic_pointer_cast<Derived>(x)
    template <class Derived, class Base>
    inline auto polymorphic_pointer_cast(Base x);

    // Effects: assert( dynamic_pointer_cast<Derived>(x) == x );
    // Returns: static_pointer_cast<Derived>(x)
    template <class Derived, class Base>
    inline auto polymorphic_pointer_downcast(Base x);

    }