1 // PR sanitizer/65583 2 // { dg-do compile } 3 // { dg-options "-std=c++11 -fsanitize=undefined" } 4 // { dg-additional-options "-Wno-return-type" } 5 6 namespace std 7 { 8 inline namespace __cxx11 9 { 10 } 11 template < typename > class allocator; 12 template < class _CharT > struct char_traits; 13 namespace __cxx11 14 { 15 template < typename _CharT, typename _Traits = 16 char_traits < _CharT >, typename _Alloc = 17 allocator < _CharT > >class basic_string; 18 typedef basic_string < char >string; 19 } 20 } 21 namespace std 22 { 23 template < typename _Tp, _Tp __v > struct integral_constant 24 { 25 static constexpr _Tp value = __v; 26 }; 27 typedef integral_constant < bool, true > true_type; 28 } 29 namespace __gnu_cxx 30 { 31 template < typename _Tp > class new_allocator 32 { 33 public: 34 typedef long unsigned size_type; 35 typedef _Tp value_type; 36 template < typename _Tp1 > struct rebind 37 { 38 typedef new_allocator < _Tp1 > other; 39 }; 40 }; 41 } 42 namespace std 43 { 44 template < typename _Tp > using __allocator_base = 45 __gnu_cxx::new_allocator < _Tp >; 46 template < typename _Tp > class allocator:public __allocator_base < _Tp > 47 { 48 }; 49 template < typename _Alloc, typename _Tp > class __alloctr_rebind_helper 50 { 51 template < typename _Alloc2, typename _Tp2 > 52 static constexpr true_type _S_chk (typename _Alloc2::template rebind < 53 _Tp2 >::other *); 54 public: 55 using __type = decltype (_S_chk < _Alloc, _Tp > (nullptr)); 56 }; 57 template < typename _Alloc, typename _Tp, bool = 58 __alloctr_rebind_helper < _Alloc, 59 _Tp >::__type::value > struct __alloctr_rebind; 60 template < typename _Alloc, typename _Tp > struct __alloctr_rebind <_Alloc, 61 _Tp, true > 62 { 63 typedef typename _Alloc::template rebind < _Tp >::other __type; 64 }; 65 template < typename _Alloc > struct allocator_traits 66 { 67 typedef typename _Alloc::value_type value_type; 68 static value_type *_S_pointer_helper (...); 69 typedef decltype (_S_pointer_helper ((_Alloc *) 0)) __pointer; 70 typedef __pointer pointer; 71 template < typename _Tp > 72 static typename _Tp::size_type _S_size_type_helper (_Tp *); 73 typedef decltype (_S_size_type_helper ((_Alloc *) 0)) __size_type; 74 typedef __size_type size_type; 75 template < typename _Tp > using rebind_alloc = 76 typename __alloctr_rebind < _Alloc, _Tp >::__type; 77 }; 78 } 79 namespace __gnu_cxx 80 { 81 template < typename _Alloc > struct __alloc_traits:std::allocator_traits < 82 _Alloc > 83 { 84 typedef std::allocator_traits < _Alloc > _Base_type; 85 template < typename _Tp > struct rebind 86 { 87 typedef typename _Base_type::template rebind_alloc < _Tp > other; 88 }; 89 }; 90 } 91 namespace std 92 { 93 namespace __cxx11 94 { 95 template < typename _CharT, typename _Traits, 96 typename _Alloc > class basic_string 97 { 98 typedef typename __gnu_cxx::__alloc_traits < _Alloc >::template rebind < 99 _CharT >::other _Char_alloc_type; 100 typedef __gnu_cxx::__alloc_traits < _Char_alloc_type > _Alloc_traits; 101 typedef _Char_alloc_type allocator_type; 102 typedef typename _Alloc_traits::size_type size_type; 103 typedef typename _Alloc_traits::pointer pointer; 104 struct _Alloc_hider:allocator_type 105 { 106 _Alloc_hider (pointer __dat, const _Alloc & __a) 107 { 108 } 109 }; 110 _Alloc_hider _M_dataplus; 111 union 112 { 113 size_type _M_allocated_capacity; 114 }; 115 pointer _M_local_data () 116 { 117 } 118 void _M_dispose () 119 { 120 _M_destroy (_M_allocated_capacity); 121 } 122 void _M_destroy (size_type __size) throw () 123 { 124 } 125 public: 126 basic_string (const _CharT * __s, const _Alloc & __a = _Alloc ()):_M_dataplus (_M_local_data (), 127 __a) 128 { 129 _M_dispose (); 130 } 131 }; 132 } 133 class FileHandle 134 { 135 std::string fname; 136 FileHandle (const char *fname); 137 }; 138 FileHandle::FileHandle (const char *fname):fname (fname) 139 { 140 } 141 } 142