static_casting constexpr void* 的结果是常量表达式吗?
Is the result of static_casting a constexpr void* a constant expression?
>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
的内容。 我是否找错了地方或误读了什么?还是我应该打开一个针对叮当声的错误?
好吧,C++14标准(以及您的(非最终)草案!)要求
条件表达式
e
是核心常量表达式,除非e
的评估,遵循抽象机的规则 (1.9),将计算以下表达式之一:— 从 CV
void *
类型转换为指向对象的指针类型;
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- 为什么这个程序的结果是3 "born"?和 4 死
- 分配给浮点数的积分文字除法 - 为什么结果是错误的?
- C++初始化的结果是什么?
- 我的输出结果是 0 英寸C++.可能是什么问题
- const_cast<字符 *>(字符* 常量) 不是左值?
- 为什么常量变量是模板特殊化所必需的,而不是常量
- 在C++中使用 fread() 来解释这个结果是什么?
- 为什么双算的结果是错误的?
- 为什么一个简单的C++程序会有错误的结果?是 #define 引起的吗?
- 在运行libtorch的模型时获得的结果是不正确的,该模型经过训练并从Pytorch出口
- 是迭代器增量结果是新的迭代器
- 为什么常量变量是可修改的?
- 结果是不同的;C++ 中的 recv(sock,buf,sizeof(buf),0) 和 strlen(buf)
- 非常量表达式的左值到右值转换的结果是常数吗?
- 将Execl命令的结果(是目录列表)输送到父进程
- 如果我将未签名的int添加到负int且算术结果是正面的,会发生什么
- decltype( (A{}.int_member) 的正确结果是什么)
- 当我们在int上进行操作时,结果是暂时存储在int中的结果
- static_casting constexpr void* 的结果是常量表达式吗?