estoy consiguiendo error de compilación con g ++ 4.6 y 1.42 impulso al utilizar boost::make_shared<T>(...)
, mientras que compila solo shared_ptr<T>(new T(...))
multa. Lamentablemente, no puedo aislar un ejemplo mínimo (todo lo que probé compilado muy bien para ambos), pero tal vez alguien podría explicarme la diferencia.impulso :: make_shared <T> (...) no se compila, shared_ptr <T> (nuevo T (...)) hace
estoy instatiating una instancia de shared_ptr<ResidualsFunctor> f
, donde ResidualsFunctor
tiene la siguiente ctor:
ResidualsFunctor(int,int,StaticEquilibriumSolver*)
Este
f=shared_ptr<ResidualsFunctor>(new ResidualsFunctor(0,0,this)); // this is a StaticEquilibriumSolver*
compila bien, mientras que
f=make_shared<ResidualsFunctor>(0,0,this);
me dice:
/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&&)
¿Es un error en el impulso? En gcc? ¿Mi culpa que no veo?
Parece una interacción extraña entre el equivalente de Boost de 'std :: forward' y su compilador. ¿Qué versión de compilador estás usando y qué versión de Boost estás usando? –
Se especifica en la pregunta, g ++ 4.6 y boost 1.42. – eudoxos