basic_regex<>::assign
Section: 28.6.7 [re.regex] Status: C++20 Submitter: Mark de Wever Opened: 2019-09-16 Last modified: 2021-02-25
Priority: 0
View all other issues in [re.regex].
View all issues with C++20 status.
Discussion:
The declaration of the overload of basic_regex<>::assign(const charT* p, size_t len, flag_type f)
has an inconsistent default argument for the flag_type f
parameter.
basic_regex& assign(const charT* p, size_t len, flag_type f);
28.6.7.3 [re.regex.assign] before p12:
basic_regex& assign(const charT* ptr, size_t len, flag_type f = regex_constants::ECMAScript);
Since all other overloads have a default argument in both 28.6.7 [re.regex] and 28.6.7.3 [re.regex.assign] I propose to add a default argument for this overload in the declaration in 28.6.7 [re.regex].
It should be pointed out that there exists implementation divergence due to the current wording state: libc++ and libstdc++ do not implement the default argument. The MS STL library does have the default argument.[2019-10-31 Issue Prioritization]
Status to Tentatively Ready and priority to 0 after six positive votes on the reflector.
Proposed resolution:
This wording is relative to N4830.
Modify 28.6.7 [re.regex], class template basic_regex
synopsis,
as indicated:
[…] // 28.6.7.3 [re.regex.assign], assign […] basic_regex& assign(const charT* ptr, flag_type f = regex_constants::ECMAScript); basic_regex& assign(const charT* p, size_t len, flag_type f = regex_constants::ECMAScript); template<class string_traits, class A> basic_regex& assign(const basic_string<charT, string_traits, A>& s, flag_type f = regex_constants::ECMAScript); template<class InputIterator> basic_regex& assign(InputIterator first, InputIterator last, flag_type f = regex_constants::ECMAScript); basic_regex& assign(initializer_list<charT>, flag_type = regex_constants::ECMAScript); […]