任何人都知道为什么以下代码在 g++ 4.7.2 下有效?如果我将名称更改printf
为另一个名称,例如f
,它会出现编译器错误,说 constexpr 不能包含非常量函数调用(我认为这是正确的行为)。
[hidden]$ cat d.cpp
extern "C" { extern int printf(const char* s, ...); }
constexpr int g() { return printf(""), 0; }
template <int N> struct X { const static int value = N; };
int n = X<g()>::value;
[hidden]$ g++ -std=c++11 -c d.cpp
[hidden]$ g++ -v |& tail -1
gcc version 4.7.2 20121109 (Red Hat 4.7.2-8) (GCC)
注意我不包含任何头文件。