Tra*_*s3r 8 c++ standards-compliance
它只是一个简单的编译测试。当clang和msvc拒绝它时,gcc接受以下内容:https : //godbolt.org/z/DlUasL
float test()
{
return reinterpret_cast<float&&>(0x7F800000);
}
Run Code Online (Sandbox Code Playgroud)
根据标准,哪一个是正确的?
此reinterpret_cast
表达式要执行的转换不在 a reinterpret_cast
可以执行的[expr.reinterpret.cast] / 1转换列表中。0x7F800000
是整数类型的文字。从整数类型的值reinterpret_cast
转换为其他类型的唯一转换是将此类值转换为指针类型[expr.reinterpret.cast] / 5。float&&
是引用类型,而不是指针类型。唯一reinterpret_cast
可以执行的转换为引用类型的转换是转换glvalue表达式[expr.reinterpret.cast] / 11的转换。0x7F800000
不是glvalue。因此,该代码格式错误。GCC接受这一事实令我感到非常惊讶,我想肯定是一个应该报告的错误……
归档时间: |
|
查看次数: |
132 次 |
最近记录: |