#include <iostream>
#include <vector>

template< class L, class R >
auto& vector_casted_push_back( std::vector< L >& owner,
                               const std::vector< R >& newcomers )
{
    for( auto newcomer : newcomers )
        owner.push_back( L( newcomer ) );
    return  owner;
}

using namespace std;

struct ASSM
{
    int v;
    template< class T >
    ASSM( T rvalue ) : v( (int)rvalue ) {}
};

std::vector< double >    BOC = { 0, 1, 2, 3 };
std::vector< long long > EOC = { 4, 5, 6, }; 

int main()
{
    auto* coreBOC = new vector< ASSM >;
    auto* coreEOC = new vector< ASSM >;

    vector_casted_push_back( *coreBOC, BOC );
    vector_casted_push_back( *coreEOC, EOC );

    return 0;
}

물론 vector 전용이 아니게 일반화 할 수도 있음~

#define CONTAINER_T( type, element_type )
    template< class, class > class type, class element_type

#define CONTAINER_D( name, element_type )
    name< element_type, std::allocator< element_type > >

template< CONTAINER_T( L, LE ), CONTAINER_T( R, RE ) >
auto& casted_push_back( CONTAINER_D( L, LE )& owner,
                        const CONTAINER_D( R, RE )& newcomers )
{
    for( auto newcomer : newcomers )
        owner.push_back( LE( newcomer ) );
    return  owner;
}

int main()
{
    auto* coreBOC = new vector< ASSM >;
    auto* coreEOC = new vector< ASSM >;

    casted_push_back( *coreBOC, BOC );
    casted_push_back( *coreEOC, EOC );

    return 0;
}