diff options
author | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-06-07 15:43:35 +0000 |
---|---|---|
committer | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-06-07 15:43:35 +0000 |
commit | 478a417bada5bf762659e94cdc8bebac8e7ecc52 (patch) | |
tree | fdd3bce4870cdf5d06cb2e1c735bfcb51ac8a837 /libstdc++-v3 | |
parent | 55336a036a945a98ee5e36dfe7d850735749ce6e (diff) | |
download | gcc-478a417bada5bf762659e94cdc8bebac8e7ecc52.tar.gz |
PR libstdc++/81002 fix std::basic_regex range constructor
PR libstdc++/81002
* include/bits/regex.h (basic_regex): Adjust call to __compile_nfa
so iterator type is deduced.
* include/bits/regex_compiler.h (__compile_nfa): Reorder template
parameters to allow iterator type to be deduced.
* testsuite/28_regex/basic_regex/ctors/basic/iter.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@248989 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/regex.h | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/regex_compiler.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/iter.cc | 30 |
4 files changed, 43 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 19bab89c8e7..d7d6979da6f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2017-06-07 Jonathan Wakely <jwakely@redhat.com> + PR libstdc++/81002 + * include/bits/regex.h (basic_regex): Adjust call to __compile_nfa + so iterator type is deduced. + * include/bits/regex_compiler.h (__compile_nfa): Reorder template + parameters to allow iterator type to be deduced. + * testsuite/28_regex/basic_regex/ctors/basic/iter.cc: New. + * include/bits/alloc_traits.h (__is_allocator, _RequireAllocator): New trait and alias for detecting Allocator-like types. * include/bits/basic_string.h (basic_string): Add deduction guide diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h index 15f0d08c8da..1710db90e74 100644 --- a/libstdc++-v3/include/bits/regex.h +++ b/libstdc++-v3/include/bits/regex.h @@ -765,7 +765,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 : _M_flags((__f & (ECMAScript | basic | extended | awk | grep | egrep)) ? __f : (__f | ECMAScript)), _M_loc(std::move(__loc)), - _M_automaton(__detail::__compile_nfa<_FwdIter, _Rx_traits>( + _M_automaton(__detail::__compile_nfa<_Rx_traits>( std::move(__first), std::move(__last), _M_loc, _M_flags)) { } diff --git a/libstdc++-v3/include/bits/regex_compiler.h b/libstdc++-v3/include/bits/regex_compiler.h index 49c01840c99..2c00939f6f9 100644 --- a/libstdc++-v3/include/bits/regex_compiler.h +++ b/libstdc++-v3/include/bits/regex_compiler.h @@ -191,7 +191,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION = typename enable_if< !__is_contiguous_normal_iter<_Iter>::value, std::shared_ptr<const _NFA<_TraitsT>> >::type; - template<typename _FwdIter, typename _TraitsT> + template<typename _TraitsT, typename _FwdIter> inline __enable_if_contiguous_normal_iter<_FwdIter, _TraitsT> __compile_nfa(_FwdIter __first, _FwdIter __last, const typename _TraitsT::locale_type& __loc, @@ -203,15 +203,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return _Cmplr(__cfirst, __cfirst + __len, __loc, __flags)._M_get_nfa(); } - template<typename _FwdIter, typename _TraitsT> + template<typename _TraitsT, typename _FwdIter> inline __disable_if_contiguous_normal_iter<_FwdIter, _TraitsT> __compile_nfa(_FwdIter __first, _FwdIter __last, const typename _TraitsT::locale_type& __loc, regex_constants::syntax_option_type __flags) { - basic_string<typename _TraitsT::char_type> __str(__first, __last); - return __compile_nfa(__str.data(), __str.data() + __str.size(), __loc, - __flags); + const basic_string<typename _TraitsT::char_type> __str(__first, __last); + return __compile_nfa<_TraitsT>(__str.data(), __str.data() + __str.size(), + __loc, __flags); } // [28.13.14] diff --git a/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/iter.cc b/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/iter.cc new file mode 100644 index 00000000000..7776c5fd557 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/iter.cc @@ -0,0 +1,30 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// { dg-do compile { target c++11 } } + +#include <regex> +#include <testsuite_iterators.h> + +void +test01() +{ + char s[] = ""; + __gnu_test::test_container<char, __gnu_test::forward_iterator_wrapper> c(s); + std::regex r1(c.begin(), c.end()); + std::regex r2(c.begin(), c.end(), std::regex_constants::grep); +} |