我正在尝试在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/