uclibc无法使用已删除的函数进行编译

时间:2018-08-30 13:48:33

标签: c++ gcc glibc uclibc

我有一个要从glibc移植到uclibc的项目,并且遇到了这种奇怪的情况。

gcc --std=c++11 Foo.cpp -o Foo-glibc
x86_64-linux-uclibc-gcc --std=c++11 Foo.cpp -o Foo-uclibc

// Compiles under glibc and uclibc
class Foo {
  Foo() = default;
  Foo(const Foo& arg) = delete;
  ~Foo() = default;
};

// Only compiles under glibc
class Foo {
  Foo() = default;
  Foo(const Foo& arg);
  ~Foo() = default;
};
Foo::Foo(const Foo& arg) = delete; // uclibc - Error: deleted definition of 'Foo::Foo(const Foo&)'

为什么会出现此错误?这是预期的行为吗?我读过的书都没有暗示uclibc应该无法处理这个问题。

1 个答案:

答案 0 :(得分:3)

这很可能是旧版gcc中的错误。

在4.8.5中,它worked,但在5.1.0中,它doesn't

引用Alan Birtles

  

[I] t在类声明中声明一个构造函数没有意义,然后将其删除。类的使用者如何知道构造函数已删除?