gcc如何允许constexpr strlen()但clang不允许?

时间:2019-05-21 19:10:51

标签: c++ g++ constexpr clang++

我认为该代码不应编译,但gcc(6.1及更高版本)会接受它(并在启用优化功能时在编译时计算字符串长度)。 clang ++(任何版本)都会出现我所期望的错误。

这合法吗?它是gcc特定的扩展或实现的怪癖吗?这是怎么回事?

#include <cstring>

#define STR "ab,c"

bool parse(const char *msg)
{
    constexpr int len = strlen(STR);
    return strlen(msg) > len;
}

g ++程序集(带有-Og)

parse(char const*):
        mov     eax, 0
        mov     rcx, -1
        repnz scasb
        mov     rax, rcx
        not     rax
        sub     rax, 1
        cmp     rax, 4
        seta    al
        ret

https://gcc.godbolt.org/z/YTpkQT

0 个答案:

没有答案