Tôi nhận được lỗi biên dịch với g ++ 4.6 và tăng 1.42 khi sử dụng boost::make_shared<T>(...)
, trong khi shared_ptr<T>(new T(...))
chỉ biên dịch khỏe. Tôi tiếc là không thể cô lập một ví dụ tối thiểu (bất cứ điều gì tôi đã thử biên soạn tốt cho cả hai), nhưng có lẽ ai đó có thể giải thích cho tôi sự khác biệt.boost :: make_shared <T> (...) không biên dịch, shared_ptr <T> (mới T (...)) hiện
Tôi instatiating một thể hiện của shared_ptr<ResidualsFunctor> f
, nơi ResidualsFunctor
có ctor sau:
ResidualsFunctor(int,int,StaticEquilibriumSolver*)
này
f=shared_ptr<ResidualsFunctor>(new ResidualsFunctor(0,0,this)); // this is a StaticEquilibriumSolver*
biên dịch tốt, trong khi
f=make_shared<ResidualsFunctor>(0,0,this);
nói với tôi:
/usr/include/boost/smart_ptr/make_shared.hpp: In function 'boost::shared_ptr<T> boost::make_shared(Args&& ...) [with T = StaticEquilibriumSolver::ResidualsFunctor, Args = int, int, StaticEquilibriumSolver* const]':
pkg/sparc/SparcField.cpp:472:49: instantiated from here
/usr/include/boost/smart_ptr/make_shared.hpp:148:5: error: no matching function for call to 'forward(int&)'
/usr/include/boost/smart_ptr/make_shared.hpp:148:5: note: candidate is:
/usr/include/boost/smart_ptr/make_shared.hpp:90:40: note: template<class T> T&& boost::detail::forward(T&&)
Đây có phải là lỗi trong việc tăng cường không? Trong gcc? Lỗi của tôi mà tôi không thấy?
Điều này giống như một tương tác lẻ giữa tương đương với Boost của 'std :: forward' và trình biên dịch của bạn. Bạn đang sử dụng phiên bản trình biên dịch nào và bạn đang sử dụng phiên bản Boost nào? –
Nó được xác định trong câu hỏi, g ++ 4.6 và tăng 1.42. – eudoxos