> On 2016-Jan-04, at 12:02, Marshall Clow via cfe-commits 
> <cfe-commits@lists.llvm.org> wrote:
> 
> mclow.lists updated this revision to Diff 43906.
> mclow.lists added a comment.
> 
> Howard suggested a fix for the "is incremental" problem in the type trait. I 
> also added assignable.
> 
> 
> http://reviews.llvm.org/D15862
> 
> Files:
>  include/algorithm
>  include/iterator
>  include/string
> 

Direction seems reasonable to me FWIW.  One comment on the latest patch:

> <D15862.43906.patch>_______________________________________________


> Index: include/string
> ===================================================================
> --- include/string
> +++ include/string
> @@ -1201,6 +1201,24 @@
>  #pragma warning( pop )
>  #endif // _LIBCPP_MSVC
>  
> +#ifdef _LIBCPP_HAS_NO_NOEXCEPT
> +struct __libcpp_string_gets_noexcept_iterator_impl : public 
> _LIBCPP_BOOL_CONSTANT(false) {};
> +#else
> +template <class _Iter>
> +struct __libcpp_string_gets_noexcept_iterator_impl : public 
> _LIBCPP_BOOL_CONSTANT((
> +     __is_forward_iterator<_Iter>::value && 
> +     noexcept(++(declval<_Iter&>())) && 
> +     is_nothrow_assignable<_Iter&, _Iter>::value && 
> +     noexcept(declval<_Iter>() == declval<_Iter>()) && 
> +     noexcept(*declval<_Iter>())
> +)) {};
> +#endif
> +
> +
> +template <class _Iter>
> +struct __libcpp_string_gets_noexcept_iterator
> +     : public 
> _LIBCPP_BOOL_CONSTANT(__libcpp_is_trivial_iterator<_Iter>::value || 
> __libcpp_string_gets_noexcept_iterator_impl<_Iter>::value) {};

This seems unnecessarily complicated.  Can you do the following now that
you're not calling `.operator++()`?
```
#ifdef _LIBCPP_HAS_NO_NOEXCEPT
struct __libcpp_string_gets_noexcept_iterator_impl
    : public _LIBCPP_BOOL_CONSTANT(__libcpp_is_trivial_iterator<_Iter>::value) 
{};
#else
// ...__libcpp_string_gets_noexcept_iterator_impl as in your patch...
#endif

template <class _Iter>
struct __libcpp_string_gets_noexcept_iterator
    : public 
_LIBCPP_BOOL_CONSTANT(__libcpp_string_gets_noexcept_iterator_impl<_Iter>::value)
 {};
```

This avoids instantiating __libcpp_is_trivial_iterator in the
!_LIBCPP_HAS_NO_NOEXCEPT case.

> +
>  #ifdef _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT
>  
> 

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to