[英]‘multiline’ is not a member of ‘std::__cxx11::regex’
I am trying to compile the following C++ code using the command: 我正在尝试使用以下命令编译以下C ++代码:
g++ -std=c++17 -o rgx rgx.cpp
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main() {
regex rgx("^([A-Z]*)$", regex::ECMAScript | regex::multiline | regex::icase);
smatch rmtch;
string str = "AbcefgH\r\nTest";
if (regex_match(str, rmtch, rgx)) {
for (size_t i = 0; i < rmtch.size(); i++) {
ssub_match smtch = rmtch[i];
string s_m = smtch.str();
cout << " submatch " << i << ": " << s_m << endl;
}
}
return 0;
};
However get the following compile time error 但是得到以下编译时错误
rgx.cpp: In function ‘int main()’:
rgx.cpp:7:53: error: ‘multiline’ is not a member of ‘std::__cxx11::regex’ {aka ‘std::__cxx11::basic_regex<char>’}
7 | regex rgx("^([A-Z]*)$", regex::ECMAScript | regex::multiline | regex::icase);
g++ --version
g++ (Ubuntu 9.1.0-8ubuntu1) 9.1.0
Why is g++ using __cxx11::regex when I've specified -std=c++17? 当我指定-std = c ++ 17时,为什么g ++使用__cxx11 :: regex?
cppreference.com/w/cpp/regex/basic_regex defines regex::multiline
as being part of the C++17
standard cppreference.com/w/cpp/regex/basic_regex将
regex::multiline
定义为C++17
标准的一部分
Libstdc++ doesn't appear to implement regex::multiline
. Libstdc ++似乎未实现
regex::multiline
。
Note that the fact that it's using std::__cxx11::regex
doesn't mean that you're stuck in the past. 请注意,它使用的是
std::__cxx11::regex
并不意味着您被困在过去。 __cxx11
is not strictly reserved to C++11 features. __cxx11
并非严格保留给C ++ 11功能。 The purpose of inline namespaces (such as __cxx11
) is that if eventually a class/struct needs to change in ways that are not backwards compatible, new programs will grab its definition from a new inline namespace while the old definition remains for programs that were built before. 内联名称空间 (例如
__cxx11
) 的目的是,如果最终一个类/结构需要以不向后兼容的方式进行更改,则新程序将从新的内联名称空间中获取其定义,而旧定义仍保留用于已构建的程序之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.