constexpr中使用strcmp的编译器差异

Chr*_*s_F 5 c++ gcc clang constexpr c++11

以下在GCC中编译,但在Clang中不编译:

#include <cstring>

constexpr int test = strcmp("test", "test");
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,GCC如何以不同的方式处理strcmp才能做到这一点?是strcmp是某种内置类型,还是标准库具有包含constexpr的非标准strcmp定义?

Pra*_*ian 5

GCC上编译代码,因为它提供了一个内置的版本strcmp,在编译时计算,假设你传递字符串文字的功能。

如果您通过(或)标志,gcc将拒绝该代码-fno-builtin-fno-builtin-strcmp