Мне удалось сделать это, используя только двух друзей:
template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
friend class std::vector;
template<typename _T1, typename _T2>
friend void std::_Construct(_T1* __p, const _T2& __value);
Поместите их в объявление класса и вуаля!
Я использую gcc 5.3.1.