考虑这个程序:
#include <iostream>
int main()
{
delete std::cout;
}
AFAIK 转换函数运算符 void* () const已从 C++11 中删除。因此,该程序在 C++11 编译器上编译时应该会失败。是的,确实 g++ 4.8.1 和 4.9.2 都给出了诊断(以警告的形式删除 void* 是未定义的,这也是一件好事)。但是这个程序不应该因为删除该转换函数而导致编译失败,因为在 C++98 和 C++03 中所有流对象都可以隐式转换为 void* 吗?这是错误吗?他们仍未实施此更改似乎有点令人惊讶。
我已经在 g++ 4.9.2(支持 C++14)中尝试过这个程序,但它给出的是警告而不是编译器错误。Ideone 编译器按预期给了我一个错误。(在这里查看现场演示)