otrzymuję błąd kompilacji z g ++ 4.6 i pobudzenia 1.42 przy użyciu boost::make_shared<T>(...)
, natomiast shared_ptr<T>(new T(...))
kompiluje tylko w porządku. Niestety nie jestem w stanie wyodrębnić minimalnego przykładu (wszystko, co starałem się skompilować dobrze dla obu), ale być może ktoś mógłby mi wyjaśnić różnicę.boost :: make_shared <T> (...) nie kompiluje, shared_ptr <T> (nowy T (...)) robi
ja instatiating wystąpienie shared_ptr<ResidualsFunctor> f
, gdzie ResidualsFunctor
posiada następujący konstruktor:
ResidualsFunctor(int,int,StaticEquilibriumSolver*)
Ten
f=shared_ptr<ResidualsFunctor>(new ResidualsFunctor(0,0,this)); // this is a StaticEquilibriumSolver*
kompiluje dobrze, natomiast
f=make_shared<ResidualsFunctor>(0,0,this);
mówi mi:
/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&&)
Czy to błąd w dopalaniu? W gcc? Moja wina, której nie widzę?
Wygląda to na dziwną interakcję pomiędzy ekwipunkiem Boosta 'std :: forward' a twoim kompilatorem. Jakiej wersji kompilatora używasz i jakiej wersji Boost używasz? –
Jest to określone w pytaniu, g ++ 4.6 i boost 1.42. – eudoxos