【问题标题】:Why is "void operator delete(void* ptr, std::size_t size) noexcept;" not defined in gcc 4.9.0?为什么“void operator delete(void* ptr, std::size_t size) noexcept;”没有在 gcc 4.9.0 中定义?
【发布时间】:2014-07-02 03:42:01
【问题描述】:

根据草案 C++14 标准 18.2.1.1,隐式定义了以下全局函数:

void operator delete(void* ptr, std::size_t size) noexcept;

但是,以下代码不能被gcc 4.9.0接受,但可以用clang 3.4编译。

int main()
{
    // error: invalid conversion from 'int' to 'void*'
    ::operator delete(new int, 1); 
}

这是 gcc 4.9.0 的缺陷吗?

【问题讨论】:

  • 您指定-std=c++1y了吗?
  • 是的,我用 -std=c++1y 指定了编译器选项。
  • 我的环境是MinGW64。
  • 顺便说一句,我查看了open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3536.html,这表明size_t 是要删除的区域的大小。 new int 似乎不太可能产生 1 字节分配。
  • "C++14" 只是暂时不存在的东西的名称。没有什么可以完全支持的。

标签: c++ c++11 gcc clang c++14


【解决方案1】:

声称完全支持C++14的gcc 4.9.0

gcc 4.9.0 没有这样的声明。您所指的operator delete 定义是作为sized deallocation 提案的一部分添加的,即gcc 中的as yet unimplemented

【讨论】:

    【解决方案2】:

    根据a previous revision的OP:

    工具链是 gcc 4.9.0 而不是 clang 3.4。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2014-09-13
      • 2021-01-02
      • 2017-01-31
      • 2013-04-08
      相关资源
      最近更新 更多