// { dg-additional-options "-Wno-analyzer-use-of-uninitialized-value" }
template <typename> class allocator {
public:
  allocator(const allocator &);
  allocator();
};
template <typename> struct allocator_traits;
template <typename _Tp> struct allocator_traits<allocator<_Tp> > {
  static allocator<_Tp> select_on_container_copy_construction() {
    return allocator<_Tp>();
  }
  static allocator<_Tp> _S_select_on_copy() {
    return select_on_container_copy_construction();
  }
};
class basic_string {
  struct _Alloc_hider {
    _Alloc_hider(allocator<char>);
  } _M_dataplus;
public:
  basic_string(basic_string &)
    : _M_dataplus(allocator_traits<allocator<char> >::_S_select_on_copy()) {}
} xxx(xxx);