This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [patch 4/4] std::regex refactoring
- From: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- To: Daniel Krügler <daniel dot kruegler at gmail dot com>
- Cc: "libstdc++" <libstdc++ at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>, Tim Shen <timshen91 at gmail dot com>, "Stephen M. Webb" <stephen dot webb at bregmasoft dot ca>
- Date: Fri, 8 Nov 2013 15:41:26 +0000
- Subject: Re: [patch 4/4] std::regex refactoring
- Authentication-results: sourceware.org; auth=none
- References: <CAH6eHdSRGuFm_oMJnjLniZFw2nKdnKncCowOv_o4M7Ud3xgiLQ at mail dot gmail dot com> <CAGNvRgCFU2HcvyXVa69kg4Qdj=FRJs4ydL7V-9huSnn8Xv-Eow at mail dot gmail dot com>
On 8 November 2013 14:51, Daniel Krügler wrote:
> I have fully not grasped for which T the specializations of
> __has_contiguous_iter are intended to be used,
Currently, only std::container iterators passed to a basic_regex
constructor, but in theory the trait could get moved to another header
and used elsewhere in future.
> but given the fact that
>
> + template<typename _Tp, typename _Alloc>
> + struct __has_contiguous_iter<std::vector<_Tp, _Alloc>>
> + : std::true_type
> + { };
>
> exists I think you really want to exclude any vector<bool, Allocator>
> by additionally adding
>
> + template<typename _Alloc>
> + struct __has_contiguous_iter<std::vector<bool, _Alloc>>
> + : std::false_type
> + { };
Hmm, I didn't think of that, damn vector<bool>! It's only needed in
case someone does this:
std::vector<bool> v;
std::regex re(v.begin(), v.end());
which would be pretty crazy, but it has well-defined behaviour and
should throw regex_error.
I'll add the specialization, thanks for catching it.