clang拒绝接受gcc允许的代码:
int main() {
static constexpr const void *vp = nullptr;
static constexpr const char *cp = static_cast<const char*>(vp);
}
以下内容:
error: constexpr variable 'cp' must be initialized by a constant expression
static constexpr const char *cp = static_cast<const char*>(vp);
阅读N3797 5.9 / 2中的最终列表后,我没有看到任何禁止static_cast
在常量表达式中使用的内容。我是在寻找错误的地方还是误读了什么?或者我应该打开一个反对clang的错误?
答案 0 :(得分:7)
嗯,C ++ 14标准(以及你的(非最终)草案!)要求
条件表达式
e
是核心常量表达式,除非e
的评估,遵循抽象机器的规则 (1.9),将评估以下表达式之一:- 从 cv
void *
类型转换为指向对象的指针类型;