/* { dg-do compile } */
/* { dg-require-profiling "-fprofile-generate" } */
/* { dg-options "-fprofile-generate" } */

template<class _CharT>     struct char_traits;
template<typename _OI>
_OI __copy_move_a2(_OI __result);
template<typename _OI>     inline _OI
copy(_OI __result)
{
  return __copy_move_a2 (__result);
}
template<typename _CharT, typename _Traits>
class basic_ostream     { };
template<typename _Tp, typename _CharT = char, typename _Traits = char_traits<_CharT> >
class ostream_iterator      {
    typedef basic_ostream<_CharT, _Traits> ostream_type;
    ostream_type* _M_stream;
    const _CharT* _M_string;
public:
    ostream_iterator(ostream_type& __s, const _CharT* __c)
	: _M_stream(&__s), _M_string(__c) { }
    ostream_iterator(const ostream_iterator& __obj)
	: _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
};
int f(void)
{
  basic_ostream<char, char_traits<char> > os;
  copy(ostream_iterator<const int>(os, ","));
  return 0;
}
