C++ 叮当声3.9,自动加速和增压
我在c++1z模式下尝试用Clang3.9编译boost时遇到了错误,因为在c++17中删除了auto_ptr。但是,我成功地用c++14模式编译了boost,并将lib文件链接到用c++1z模式编译的可执行文件。那么,将来会有任何ABI问题或潜在的bug吗?自动ptr不应该有任何ABI问题,因为它只是一个标题功能-在libc++.dylib中没有任何内容 在包含任何libc++头之前,还可以通过定义C++ 叮当声3.9,自动加速和增压,c++,boost,clang,C++,Boost,Clang,我在c++1z模式下尝试用Clang3.9编译boost时遇到了错误,因为在c++17中删除了auto_ptr。但是,我成功地用c++14模式编译了boost,并将lib文件链接到用c++1z模式编译的可执行文件。那么,将来会有任何ABI问题或潜在的bug吗?自动ptr不应该有任何ABI问题,因为它只是一个标题功能-在libc++.dylib中没有任何内容 在包含任何libc++头之前,还可以通过定义\u LIBCPP\u ENABLE\u CXX17\u REMOVED\u auto\u pt
\u LIBCPP\u ENABLE\u CXX17\u REMOVED\u auto\u ptr
将自动\u ptr
返回到libc++中
最好的解决方案是,当您为C++17编译时,请您使用的任何boost库的维护人员不要使用
auto\u ptr
。@当然,但是使用auto\u ptr的是boost库,所以我需要切换到C++14模式来通过编译,然后链接到c++1z可执行文件。但这不仅是auto_ptr的ABI问题,相反,它将两个具有不同编译器标志的目标文件组合在一起。但是,在c++1z模式下应用宏应该可以在不考虑ABI的情况下完成工作。同时,感谢分享这些知识。将两个具有不同编译器标志的目标文件组合在一起会有很多问题。有时候,它们只是不链接(-arch i386
和-arch x86\u 64
)。有时,它们会工作得很好(上面的例子)。有时,在您进行一次特定调用之前,它们似乎一直有效(-d\u LIBCPP\u ABI\u ALTERNATE\u STRING\u布局
)。