这是谁的错误——clang 还是 gcc?
Posted
技术标签:
【中文标题】这是谁的错误——clang 还是 gcc?【英文标题】:Whose bug is this - clang or gcc? 【发布时间】:2017-04-06 09:08:56 【问题描述】:#include <regex>
#include <string>
#include <iostream>
using namespace std;
bool IsMatched()
string str = R"(Liy_0-3863)";
string re = R"([:\-_a-zA-Z\d]+)";
auto flags = std::regex_constants::ECMAScript;
return std::regex_match(str.data(),
std::regex(re.data(), re.size(), flags));
int main()
cout << boolalpha << IsMatched();
clang 4.0 输出 true
;
gcc 6.2 输出 false
。
这是谁的错误 - clang 还是 gcc?
【问题讨论】:
GCC 中继打印true
,所以我认为答案是显而易见的。
问题标题非常具有误导性。这个问题永远无法通过搜索找到。请使标题更能描述问题,并在关键字中添加正则表达式。
@Ryan 就是这个\-
gcc.gnu.org/bugzilla/show_bug.cgi?id=77469
【参考方案1】:
g++(或者更确切地说是 stdlibc++)在错误中。
根据 ECMAScript 规范,转义的减号应该在字符类中按字面意思对待。 libstdc++ 没有这样做。它可以在一个更简单的例子中看到
string: a-b
regex: [a\-b]+
gcc 说没有匹配,各种正则表达式测试人员说有。
【讨论】:
以上是关于这是谁的错误——clang 还是 gcc?的主要内容,如果未能解决你的问题,请参考以下文章
constexpr 具有未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc?
是否有类似 -mcpu= 但用于 gcc 和 clang 中的操作系统选择的东西?还是“选择最匹配的最近目标”?