我认为这个程序是正确的,但是我不知道导致使用clang时在链接阶段成功编译并失败的技术问题,但是当我使用clang ++时,它可以正常工作。
#include<memory>
struct S{
std::unique_ptr<int> up;
};
int main(){
S s;
s.operator=(S{});
}
请注意,它在我的机器上(使用clang和clang-8的Ubuntu 18.04)和coliru失败,但是在其他一些在线编译器上,它可以正常工作。
输出:
clang main.cpp -std = c ++ 14
/tmp/main-696905.o:在功能中 `std :: default_delete :: operator()(int *)const':
main.cpp :(。text._ZNKSt14default_deleteIiEclEPi [_ZNKSt14default_deleteIiEclEPi] + 0x2a): 未定义对`operator delete(void *)'的引用
/tmp/main-696905.o:在函数__clang_call_terminate中:
main.cpp :(。text .__ clang_call_terminate [__ clang_call_terminate] + 0x2): 未定义对__cxa_begin_catch的引用
main.cpp :(。text .__ clang_call_terminate [__ clang_call_terminate] + 0xb): 未定义对`std :: terminate()'的引用
/tmp/main-696905.o :(。eh_frame + 0x7f):未定义的引用 `__gxx_personality_v0'
clang:错误:链接器命令失败,退出代码为1(使用-v查看 调用)
当我尝试使用clang ++而不是clang时,它会起作用。