Rya*_*ing 4 c++ clang language-lawyer constexpr c++14
clang拒绝了gcc允许的代码:
int main() {
static constexpr const void *vp = nullptr;
static constexpr const char *cp = static_cast<const char*>(vp);
}
Run Code Online (Sandbox Code Playgroud)
具有以下内容:
error: constexpr variable 'cp' must be initialized by a constant expression
static constexpr const char *cp = static_cast<const char*>(vp);
Run Code Online (Sandbox Code Playgroud)
在阅读N3797 5.9/2中的最终列表后,我没有看到任何禁止static_cast在常量表达中使用的内容.我是在寻找错误的地方还是误读了什么?或者我应该打开一个反对clang的bug?
好吧,C++ 14标准(以及你的(非最终)草案!)要求这样做
甲条件表达式
e是一个核心常量表达式除非的评价e,如下所述抽象机(1.9),将评估下面的表达式中的一个的规则:- 从类型cv
void *到指向对象类型的转换;