为什么 (int&)0 格式错误?

Why is (int&)0 ill-formed?

根据 [expr.cast]/4,C 风格转换按顺序尝试以下转换:

  1. const_cast
  2. static_cast
  3. static_cast 后跟 const_cast
  4. reinterpret_cast
  5. 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,但是目前还没有人关注