| // PR sanitizer/65583 |
| // { dg-do compile } |
| // { dg-options "-std=c++11 -fsanitize=undefined -Wno-return-type" } |
| |
| namespace std |
| { |
| inline namespace __cxx11 |
| { |
| } |
| template < typename > class allocator; |
| template < class _CharT > struct char_traits; |
| namespace __cxx11 |
| { |
| template < typename _CharT, typename _Traits = |
| char_traits < _CharT >, typename _Alloc = |
| allocator < _CharT > >class basic_string; |
| typedef basic_string < char >string; |
| } |
| } |
| namespace std |
| { |
| template < typename _Tp, _Tp __v > struct integral_constant |
| { |
| static constexpr _Tp value = __v; |
| }; |
| typedef integral_constant < bool, true > true_type; |
| } |
| namespace __gnu_cxx |
| { |
| template < typename _Tp > class new_allocator |
| { |
| public: |
| typedef long unsigned size_type; |
| typedef _Tp value_type; |
| template < typename _Tp1 > struct rebind |
| { |
| typedef new_allocator < _Tp1 > other; |
| }; |
| }; |
| } |
| namespace std |
| { |
| template < typename _Tp > using __allocator_base = |
| __gnu_cxx::new_allocator < _Tp >; |
| template < typename _Tp > class allocator:public __allocator_base < _Tp > |
| { |
| }; |
| template < typename _Alloc, typename _Tp > class __alloctr_rebind_helper |
| { |
| template < typename _Alloc2, typename _Tp2 > |
| static constexpr true_type _S_chk (typename _Alloc2::template rebind < |
| _Tp2 >::other *); |
| public: |
| using __type = decltype (_S_chk < _Alloc, _Tp > (nullptr)); |
| }; |
| template < typename _Alloc, typename _Tp, bool = |
| __alloctr_rebind_helper < _Alloc, |
| _Tp >::__type::value > struct __alloctr_rebind; |
| template < typename _Alloc, typename _Tp > struct __alloctr_rebind <_Alloc, |
| _Tp, true > |
| { |
| typedef typename _Alloc::template rebind < _Tp >::other __type; |
| }; |
| template < typename _Alloc > struct allocator_traits |
| { |
| typedef typename _Alloc::value_type value_type; |
| static value_type *_S_pointer_helper (...); |
| typedef decltype (_S_pointer_helper ((_Alloc *) 0)) __pointer; |
| typedef __pointer pointer; |
| template < typename _Tp > |
| static typename _Tp::size_type _S_size_type_helper (_Tp *); |
| typedef decltype (_S_size_type_helper ((_Alloc *) 0)) __size_type; |
| typedef __size_type size_type; |
| template < typename _Tp > using rebind_alloc = |
| typename __alloctr_rebind < _Alloc, _Tp >::__type; |
| }; |
| } |
| namespace __gnu_cxx |
| { |
| template < typename _Alloc > struct __alloc_traits:std::allocator_traits < |
| _Alloc > |
| { |
| typedef std::allocator_traits < _Alloc > _Base_type; |
| template < typename _Tp > struct rebind |
| { |
| typedef typename _Base_type::template rebind_alloc < _Tp > other; |
| }; |
| }; |
| } |
| namespace std |
| { |
| namespace __cxx11 |
| { |
| template < typename _CharT, typename _Traits, |
| typename _Alloc > class basic_string |
| { |
| typedef typename __gnu_cxx::__alloc_traits < _Alloc >::template rebind < |
| _CharT >::other _Char_alloc_type; |
| typedef __gnu_cxx::__alloc_traits < _Char_alloc_type > _Alloc_traits; |
| typedef _Char_alloc_type allocator_type; |
| typedef typename _Alloc_traits::size_type size_type; |
| typedef typename _Alloc_traits::pointer pointer; |
| struct _Alloc_hider:allocator_type |
| { |
| _Alloc_hider (pointer __dat, const _Alloc & __a) |
| { |
| } |
| }; |
| _Alloc_hider _M_dataplus; |
| union |
| { |
| size_type _M_allocated_capacity; |
| }; |
| pointer _M_local_data () |
| { |
| } |
| void _M_dispose () |
| { |
| _M_destroy (_M_allocated_capacity); |
| } |
| void _M_destroy (size_type __size) throw () |
| { |
| } |
| public: |
| basic_string (const _CharT * __s, const _Alloc & __a = _Alloc ()):_M_dataplus (_M_local_data (), |
| __a) |
| { |
| _M_dispose (); |
| } |
| }; |
| } |
| class FileHandle |
| { |
| std::string fname; |
| FileHandle (const char *fname); |
| }; |
| FileHandle::FileHandle (const char *fname):fname (fname) |
| { |
| } |
| } |