Created on 2019-01-05.00:00:00 last changed 72 months ago
Proposed resolution:
This wording is relative to N4791.
Change [range.split.outer] as follows:
namespace std::ranges { template<class V, class Pattern> template<bool Const> struct split_view<V, Pattern>::outer_iterator { […] constexpr outer_iterator(outer_iterator<!Const> i) requires Const && ConvertibleTo<iterator_t<V>, iterator_t<const VBase>>; […] }; }[…]
constexpr outer_iterator(outer_iterator<!Const> i) requires Const && ConvertibleTo<iterator_t<V>, iterator_t<const VBase>>;-4- Effects: Initializes parent_ with i.parent_ and current_ with std::move(i.current_).
[…]
[ 2019-01-20 Reflector prioritization ]
Set status to NAD
The constraints on split_view::outer_iterator's converting constructor:
are problematic. Since const V doesn't depend on a template parameter of outer_iterator, compilers want to expand iterator_t<const V> when outer_iterator is instantiated - regardless of the value of Const - which can result in a hard error when iterator_t<const V> is ill-formed. The constraint should instead use iterator_t<Base>, as do the similar converting constructors for the other range adaptor iterator and sentinel types.constexpr outer_iterator(outer_iterator<!Const> i) requires Const && ConvertibleTo<iterator_t<V>, iterator_t<const V>>;
History | |||
---|---|---|---|
Date | User | Action | Args |
2019-01-20 16:20:00 | admin | set | messages: + msg10293 |
2019-01-20 16:20:00 | admin | set | status: new -> nad |
2019-01-05 15:23:51 | admin | set | messages: + msg10274 |
2019-01-05 00:00:00 | admin | create |