Stream objects cannot be copied. That would be the safe workaround. 

OTOH the following would compile...

template<typename T>
auto print_vector( const vector<T> & v )
{
    return copy( begin(v), end(v), ostream_iterator<int>(
 stringstream{}=stringstream{},// assignment returns lvalue to temp. 
 ", " ) );
}

sent from a mobile device so please excuse strange words due to autocorrection. 
Peter Sommerlad
peter.cpp@sommerlad.ch
+41-79-432 23 32

On 1 Feb 2021, at 09:11, Marco Fantozzi via Std-Proposals <std-proposals@lists.isocpp.org> wrote:



Sorry, but I fail to see why the above is more dangerous than taking a reference to a member of any temporary...

Cheers.


Il giorno dom 31 gen 2021 alle ore 23:00 Dvir Yitzchaki <dvirtz@gmail.com> ha scritto:

this is dangerous because it’s easy to create a dangling reference if not consumed immediately, e.g.

template<typename T>
std::string print_vector( const vector<T> & v )
{
    const auto& stream = copy( begin(v), end(v), ostream_iterator<int>( stringstream{}, ", " ) ).stream();
    return stream.str(); // dangling
}

On Sun, 31 Jan 2021 at 18:26, Marco Fantozzi via Std-Proposals <std-proposals@lists.isocpp.org> wrote:
Hello,

I'm new to the newsletter, so I might not be in line with standard netiquette here... In case please make me aware of my shortcomings, thanks :-)


I noticed that it is not possible to retrieve the output stream used by a std::ostream_iterator,
even if it would be useful in a few contexts like the following example:

std::string print_vector( const std::vector<int> & v )
{
    std::stringstream s;
    copy( begin(v), end(v), std::ostream_iterator<int>( s, ", " ) );
    return s.str();
}

If there was a method ostream_iterator<...>::stream() that returns the reference to the stream captured by the iterator,
it would be possible to make the above code more concise:

template<typename T>
std::string print_vector( const vector<T> & v )
{
    return copy( begin(v), end(v), ostream_iterator<int>( stringstream{}, ", " ) ).stream().str();
}

Naturally the extension should apply to all input/output iterator facades in the STL

Thanks

--
Trinetra
--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals


--
Marco Fantozzi



--
--
Marco Fantozzi
cell +39 320 9322942

--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals