This implements LWG 2503, which allows ^ and $ to match line terminator characters, rather than only matching the beginning and end of the entire input. The multiline option is only valid for ECMAScript, but for other grammars we ignore it rather than throwing an exception. This is related to PR libstdc++/102480, which incorrectly said that ECMAscript should match the beginning of a line when match_prev_avail is used. I think that's only supposed to happen when multiline is used. The new regex_constants::multiline and basic_regex::multiline constants are not defined for strict -std=c++11 and -std=c++14 modes, but regex_constants::__multiline is always defined, so that the implementation can use it internally. Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/bits/regex.h (basic_regex::multiline): Define constant for C++17. * include/bits/regex_constants.h (regex_constants::multiline): Define constant for C++17. (regex_constants::__multiline): Define duplicate constant for internal use in C++11 and C++14. * include/bits/regex_executor.h (_Executor::_M_match_multiline()): New member function. (_Executor::_M_is_line_terminator(_CharT)): New member function. (_Executor::_M_at_begin(), _Executor::_M_at_end()): Use new member functions to support multiline matches. * testsuite/28_regex/algorithms/regex_match/multiline.cc: New test. Tested x86_64-linux. Committed to trunk.