这是谁的错误——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?的主要内容,如果未能解决你的问题,请参考以下文章

这是对 std::bind 的错误使用还是编译器错误?

constexpr 具有未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc?

是否有类似 -mcpu= 但用于 gcc 和 clang 中的操作系统选择的东西?还是“选择最匹配的最近目标”?

这是优化器的怪癖还是语言规则禁止优化的结果?

Clang vs GCC - 产生更快的二进制文件? [关闭]

如何在 gcc/clang 中的错误和警告之间添加换行符/边框