OK, I think I figured it out. I added tests for the ostream_iterator constructors in r269838. I'll follow that up with tests for the istream_iterator constructors, but my current test is failing for reasons beyond me.
/Eric On Tue, May 17, 2016 at 2:36 PM, Eric Fiselier <e...@efcs.ca> wrote: > Or maybe I'm still wrong. I tried using a custom traits class to hijack > ADL for "operator&" but it doesn't seem to work. > > Sorry for the spam. > > /Eric > > On Tue, May 17, 2016 at 2:25 PM, Eric Fiselier <e...@efcs.ca> wrote: > >> Woops. I was incorrect. It seems that user defined "operator&" overloads >> can be found in the constructor. From the LWG issue: >> >> > Note that {i,o}stream_type are specializations of basic_{i,o}stream, >> but the constructors might still pick up an overloaded & via the traits >> template parameter. >> >> At least that also tells us how to test it. >> >> /Eric >> >> On Tue, May 17, 2016 at 2:08 PM, Eric Fiselier <e...@efcs.ca> wrote: >> >>> The difference between "operator&" and "addressof" is inconsequential >>> when user defined overloads of "operator&" can't be found, which is the >>> case for the changes in the stream iterator constructors. We might as well >>> keep it consistent though. I don't see any value changing it back to use >>> "operator&" in either the library or the standard. >>> >>> /Eric >>> >>> On Tue, May 17, 2016 at 2:02 PM, David Blaikie <dblai...@gmail.com> >>> wrote: >>> >>>> If some parts are not testable & as you say, not meaningful, then it >>>> seems OK to just not implement them & file a DR on the standard, no? >>>> >>>> On Tue, May 17, 2016 at 1:00 PM, Eric Fiselier <e...@efcs.ca> wrote: >>>> >>>>> I added a test for operator->() in r269812. Marshall and I discussed >>>>> offline about how not all parts of this change are testable (and hence not >>>>> meaningful) but that's what the standard says to do. >>>>> >>>>> >>>>> On Tue, May 17, 2016 at 1:51 PM, David Blaikie via cfe-commits < >>>>> cfe-commits@lists.llvm.org> wrote: >>>>> >>>>>> Test coverage? >>>>>> >>>>>> On Tue, May 17, 2016 at 10:44 AM, Marshall Clow via cfe-commits < >>>>>> cfe-commits@lists.llvm.org> wrote: >>>>>> >>>>>>> Author: marshall >>>>>>> Date: Tue May 17 12:44:40 2016 >>>>>>> New Revision: 269789 >>>>>>> >>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=269789&view=rev >>>>>>> Log: >>>>>>> Implement LWG2576: istream_iterator and ostream_iterator should use >>>>>>> std::addressof >>>>>>> >>>>>>> Modified: >>>>>>> libcxx/trunk/include/iterator >>>>>>> libcxx/trunk/www/cxx1z_status.html >>>>>>> >>>>>>> Modified: libcxx/trunk/include/iterator >>>>>>> URL: >>>>>>> http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/iterator?rev=269789&r1=269788&r2=269789&view=diff >>>>>>> >>>>>>> ============================================================================== >>>>>>> --- libcxx/trunk/include/iterator (original) >>>>>>> +++ libcxx/trunk/include/iterator Tue May 17 12:44:40 2016 >>>>>>> @@ -772,14 +772,14 @@ private: >>>>>>> _Tp __value_; >>>>>>> public: >>>>>>> _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR istream_iterator() >>>>>>> : __in_stream_(0), __value_() {} >>>>>>> - _LIBCPP_INLINE_VISIBILITY istream_iterator(istream_type& __s) : >>>>>>> __in_stream_(&__s) >>>>>>> + _LIBCPP_INLINE_VISIBILITY istream_iterator(istream_type& __s) : >>>>>>> __in_stream_(_VSTD::addressof(__s)) >>>>>>> { >>>>>>> if (!(*__in_stream_ >> __value_)) >>>>>>> __in_stream_ = 0; >>>>>>> } >>>>>>> >>>>>>> _LIBCPP_INLINE_VISIBILITY const _Tp& operator*() const {return >>>>>>> __value_;} >>>>>>> - _LIBCPP_INLINE_VISIBILITY const _Tp* operator->() const {return >>>>>>> &(operator*());} >>>>>>> + _LIBCPP_INLINE_VISIBILITY const _Tp* operator->() const {return >>>>>>> _VSTD::addressof((operator*()));} >>>>>>> _LIBCPP_INLINE_VISIBILITY istream_iterator& operator++() >>>>>>> { >>>>>>> if (!(*__in_stream_ >> __value_)) >>>>>>> @@ -811,9 +811,9 @@ private: >>>>>>> const char_type* __delim_; >>>>>>> public: >>>>>>> _LIBCPP_INLINE_VISIBILITY ostream_iterator(ostream_type& __s) >>>>>>> - : __out_stream_(&__s), __delim_(0) {} >>>>>>> + : __out_stream_(_VSTD::addressof(__s)), __delim_(0) {} >>>>>>> _LIBCPP_INLINE_VISIBILITY ostream_iterator(ostream_type& __s, >>>>>>> const _CharT* __delimiter) >>>>>>> - : __out_stream_(&__s), __delim_(__delimiter) {} >>>>>>> + : __out_stream_(_VSTD::addressof(__s)), >>>>>>> __delim_(__delimiter) {} >>>>>>> _LIBCPP_INLINE_VISIBILITY ostream_iterator& operator=(const >>>>>>> _Tp& __value_) >>>>>>> { >>>>>>> *__out_stream_ << __value_; >>>>>>> >>>>>>> Modified: libcxx/trunk/www/cxx1z_status.html >>>>>>> URL: >>>>>>> http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx1z_status.html?rev=269789&r1=269788&r2=269789&view=diff >>>>>>> >>>>>>> ============================================================================== >>>>>>> --- libcxx/trunk/www/cxx1z_status.html (original) >>>>>>> +++ libcxx/trunk/www/cxx1z_status.html Tue May 17 12:44:40 2016 >>>>>>> @@ -222,7 +222,7 @@ >>>>>>> <tr><td><a href=" >>>>>>> http://cplusplus.github.io/LWG/lwg-defects.html#2572";>2572</a></td><td>The >>>>>>> remarks for <tt>shared_ptr::operator*</tt> should apply to >>>>>>> <i>cv</i>-qualified <tt>void</tt> as >>>>>>> well</td><td>Jacksonville</td><td>Complete</td></tr> >>>>>>> <tr><td><a href=" >>>>>>> http://cplusplus.github.io/LWG/lwg-defects.html#2574";>2574</a></td><td>[fund.ts.v2] >>>>>>> <tt>std::experimental::function::operator=(F&&)</tt> should be >>>>>>> constrained</td><td>Jacksonville</td><td></td></tr> >>>>>>> <tr><td><a href=" >>>>>>> http://cplusplus.github.io/LWG/lwg-defects.html#2575";>2575</a></td><td>[fund.ts.v2] >>>>>>> <tt>experimental::function::assign</tt> should be >>>>>>> removed</td><td>Jacksonville</td><td></td></tr> >>>>>>> - <tr><td><a href=" >>>>>>> http://cplusplus.github.io/LWG/lwg-defects.html#2576";>2576</a></td><td><tt>istream_iterator</tt> >>>>>>> and <tt>ostream_iterator</tt> should use >>>>>>> <tt>std::addressof</tt></td><td>Jacksonville</td><td></td></tr> >>>>>>> + <tr><td><a href=" >>>>>>> http://cplusplus.github.io/LWG/lwg-defects.html#2576";>2576</a></td><td><tt>istream_iterator</tt> >>>>>>> and <tt>ostream_iterator</tt> should use >>>>>>> <tt>std::addressof</tt></td><td>Jacksonville</td><td>Complete</td></tr> >>>>>>> <tr><td><a href=" >>>>>>> http://cplusplus.github.io/LWG/lwg-defects.html#2577";>2577</a></td><td><tt>{shared,unique}_lock</tt> >>>>>>> should use >>>>>>> <tt>std::addressof</tt></td><td>Jacksonville</td><td>Complete</td></tr> >>>>>>> <tr><td><a href=" >>>>>>> http://cplusplus.github.io/LWG/lwg-defects.html#2579";>2579</a></td><td>Inconsistency >>>>>>> wrt Allocators in <tt>basic_string</tt> assignment vs. >>>>>>> <tt>basic_string::assign</tt></td><td>Jacksonville</td><td>Complete</td></tr> >>>>>>> <tr><td><a href=" >>>>>>> http://cplusplus.github.io/LWG/lwg-defects.html#2581";>2581</a></td><td>Specialization >>>>>>> of <tt><type_traits></tt> variable templates should be >>>>>>> prohibited</td><td>Jacksonville</td><td>Complete</td></tr> >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> cfe-commits mailing list >>>>>>> cfe-commits@lists.llvm.org >>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> cfe-commits mailing list >>>>>> cfe-commits@lists.llvm.org >>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>>>> >>>>>> >>>>> >>>> >>> >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits