STD Container Constructors

STD container constructors look very similar. For a given container Container, the following constructors are expected to be provided:

Container();

template< class InputIt >
Container( InputIt first, InputIt last,
     const Allocator& alloc = Allocator() );

template< class InputIt >
Container( InputIt first, InputIt last,
     const Allocator& alloc )
    : Container(first, last, alloc) {}

Container( const Container& other );

Container( const Container& other, const Allocator& alloc );

Container( Container&& other );

Container( Container&& other, const Allocator& alloc );

Container( std::initializer_list<value_type> init,
     const Allocator& alloc = Allocator() );

Container( std::initializer_list<value_type> init,
     const Allocator& alloc )
    : Container(init, alloc) {}

template< container-compatible-range<value_type> R >
Container( std::from_range_t, R&& rg,
     const Allocator& alloc = Allocator() );

template< container-compatible-range<value_type> R >
Container( std::from_range_t, R&& rg,
     const Allocator& alloc )
    : Container(std::from_range, std::forward<R>(rg), alloc) {}