#include <iostream>
#include <algorithm>
#include <vector>
#include <memory>

int i=0;

struct B {
    int p = 1;
};

struct A : public B
{
    A()
    {
        array_ = { std::shared_ptr< B >( new B ) };
    }

    std::vector< std::shared_ptr< B > >::iterator       begin()
    {
        return array_.begin();
    }

    std::vector< std::shared_ptr< B > >::const_iterator begin() const
    {
        return array_.begin();
    }

    std::vector< std::shared_ptr< B > >::iterator       end  ()
    {
        return array_.end();
    }

    std::vector< std::shared_ptr< B > >::const_iterator end  () const
    {
        return array_.end();
    }

    std::vector< std::shared_ptr< B > > array_;
};

int main()
{
    B* a = new B();
    for( auto it : static_cast< A* >( a ) )
    {
        std::cout << it->p << std::endl;
    }
}