Le 25/11/2017 à 21:56, Andreas Tille a écrit : > Hi, > > I started packaging centrifuge[1] and hit a build error which > is most probably caused by gcc-7 incompatibility: > > ... > In file included from centrifuge_build.cpp:27:0: > bt2_idx.h: In static member function 'static std::pair<Ebwt<index_t>*, Ebwt<index_t>*> Ebwt<index_t>::fromStrings(const EList<std::__cxx11::basic_string<char> >&, bool, int, int, bool, int32_t, int32_t, int32_t, const string&, bool, index_t, index_t, index_t, int, uint32_t, bool, bool, bool)': > bt2_idx.h:1053:3: warning: 'template<class> class std::auto_ptr' is deprecated [-Wdeprecated-declarations] > auto_ptr<stringstream> ss(new stringstream()); > ^~~~~~~~ > In file included from /usr/include/c++/7/memory:80:0, > from bt2_idx.h:28, > from centrifuge_build.cpp:27: > /usr/include/c++/7/bits/unique_ptr.h:51:28: note: declared here > template<typename> class auto_ptr; > ^~~~~~~~ > In file included from centrifuge_build.cpp:27:0: > bt2_idx.h:1057:3: warning: 'template<class> class std::auto_ptr' is deprecated [-Wdeprecated-declarations] > auto_ptr<FileBuf> fb(new FileBuf(ss.get())); > ^~~~~~~~ > In file included from /usr/include/c++/7/memory:80:0, > from bt2_idx.h:28, > from centrifuge_build.cpp:27: > /usr/include/c++/7/bits/unique_ptr.h:51:28: note: declared here > template<typename> class auto_ptr; > ... > Hi, You can replace auto_ptr with unique_ptr which was introduced with C++11. std::unique_ptr is declared in the same header as auto_ptr (<memory>). One major difference is that std::unique_ptr cannot be copied but moved instead. For example: std::unique_ptr<FileBuf> fb(new FileBuf); std::unique_ptr<FileBuf> fb2 = std::move(p); After that second line, p will be empty/null and p2 will contains the FileBuf pointer. But in bt2_idx.h, the auto_ptr variables are not copied around so you probably just need to replace "auto_ptr" with "unique_ptr" and that's all. -- Alexis Murzeau PGP: B7E6 0EBB 9293 7B06 BDBC 2787 E7BD 1904 F480 937F
Attachment:
signature.asc
Description: OpenPGP digital signature