syntax_option_type
?Section: 28.6.7.2 [re.regex.construct], 28.6.4.2 [re.synopt] Status: New Submitter: Jonathan Wakely Opened: 2021-09-27 Last modified: 2021-10-14
Priority: 3
View other active issues in [re.regex.construct].
View all other issues in [re.regex.construct].
View all issues with New status.
Discussion:
28.6.4.2 [re.synopt] says:
A valid value of type
syntax_option_type
shall have at most one of the grammar elementsECMAScript
,basic
,extended
,awk
,grep
,egrep
, set.
But then we never say what happens if an invalid value is used.
What doesstd::regex(".", std::regex::grep|std::regex::awk)
do? Is it undefined? Does it throw?
It seems reasonable for basic_regex
constructors to throw if f
is not a valid value, i.e.
for each non-default constructor:
Throws:
regex_error
iff
is not a valid value, or if […] is not a valid regular expression according to the grammar specified byf
.
However, there is no regex_constants::error_code
value suitable for this error condition.
flags()
returns f
." This prevents an
implementation from storing f|ECMAScript
in flags()
if no grammar element is present in f
.
This seems like an unnecessary restriction, and forces implementations to do extra work to check if the
ECMAScript
grammar is in use. Arguably, it would even be better to require implementations to set
ECMAScript
in flags()
if no grammar element was set in the flags passed to the constructor.
This problem was introduced by LWG 2330.
[2021-10-14; Reflector poll]
Set priority to 3 after reflector poll.
Proposed resolution: