blob: 5ea863f1ae7a4de6439c87cbfd24d6539ed541ce [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-c -O -fgcse-after-reload -fnon-call-exceptions" } */
template < typename _Tp > class new_allocator
{
public:
typedef _Tp pointer;
template < typename _Tp1 > struct rebind
{
typedef new_allocator < _Tp1 > other;
};
};
template < typename > class allocator;
template < typename _Alloc > struct __alloc_traits
{
typedef typename _Alloc::pointer pointer;
template < typename _Tp > struct rebind
{
typedef typename _Alloc::template rebind < _Tp >::other other;
};
};
template < typename _Tp, typename _Alloc > struct _Vector_base
{
typedef
typename
__alloc_traits < _Alloc >::template rebind < _Tp >::other _Tp_alloc_type;
typedef typename __alloc_traits < _Tp_alloc_type >::pointer pointer;
struct _Vector_impl
{
pointer _M_start;
pointer _M_end_of_storage;
};
~_Vector_base ();
_Vector_impl _M_impl;
};
template < typename _Tp, typename _Alloc = allocator < _Tp > >class vector:
_Vector_base < _Tp, _Alloc >
{
typedef _Vector_base < _Tp, _Alloc > _Base;
public:
typedef typename _Base::pointer pointer;
vector ():
_Base ()
{
_M_erase_at_end (this->_M_impl._M_start);
}
void _M_erase_at_end (pointer)
{
}
};
template < typename T > class clear_alloc:
public new_allocator < T >
{
};
void
foo ()
{
new vector < int, clear_alloc < int > >;
}