为什么 (int&)0 格式错误?
Why is (int&)0 ill-formed?
根据 [expr.cast]/4,C 风格转换按顺序尝试以下转换:
const_cast
static_cast
static_cast
后跟 const_cast
reinterpret_cast
reinterpret_cast
后跟 const_cast
以下转换格式正确:
const_cast<int&>(static_cast<const int&>(0))
然而 GCC 和 Clang reject 演员表 (int&)0
。为什么?
这是一个bug in gcc and clang。
根据 CWG 909,在为 C-style 演员表生成演员表序列时应使用“对措辞的直截了当的解释”;在那里,第一个转换调用转换运算符,但没有理由认为当第一个转换是引用绑定临时时它应该有任何不同。
我已经发帖了a patch to the gcc mailing list, generated from this git branch,但是目前还没有人关注
根据 [expr.cast]/4,C 风格转换按顺序尝试以下转换:
const_cast
static_cast
static_cast
后跟const_cast
reinterpret_cast
reinterpret_cast
后跟const_cast
以下转换格式正确:
const_cast<int&>(static_cast<const int&>(0))
然而 GCC 和 Clang reject 演员表 (int&)0
。为什么?
这是一个bug in gcc and clang。
根据 CWG 909,在为 C-style 演员表生成演员表序列时应使用“对措辞的直截了当的解释”;在那里,第一个转换调用转换运算符,但没有理由认为当第一个转换是引用绑定临时时它应该有任何不同。
我已经发帖了a patch to the gcc mailing list, generated from this git branch,但是目前还没有人关注