我正在尝试在LLVMContext类中创建Application成员变量。 MCVE:

#include <llvm/IR/LLVMContext.h>

struct Foo {};

class Application {
public:
  Application(int a, Foo foo, int b);
private:
  llvm::LLVMContext context_;
};

void function() {
  auto application = Application(12, Foo(), 21);
}

但是,添加变量会产生一些非常奇怪的错误:(Clang 4.0.1和Apple LLVM版本8.1.0)



这里发生了什么?为什么Clang认为我要尝试使用带有一个参数的构造函数(“但提供了1个”)?

最佳答案

llvm::LLVMContext不是可复制的类。它的副本c'tor已从documentation中删除:

LLVMContext (LLVMContext &) = delete

由于您确实进行了复制初始化,因此编译器必须检查您的类是否存在可行的复制 Controller 。但是由于llvm::LLVMContext,它被隐式删除。

除非您使用的是保证复制删除的C++ 17,并且编译器可以避免检查,否则请除去auto类型声明:
Application application {12, Foo(), 21};

关于c++ - LLVMContext作为类成员破坏了构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46022755/

10-09 06:40