Я получаю ошибку компиляции с g ++ 4.6 и повышение 1.42 при использовании boost::make_shared<T>(...)
, тогда как shared_ptr<T>(new T(...))
компилируется просто отлично.Я, к сожалению, не могу выделить минимальный пример (все, что я пытался скомпилировать, отлично подходит для обоих), но, возможно, кто-то может объяснить мне разницу.
Я утверждаю экземпляр shared_ptr<ResidualsFunctor> f
, где ResidualsFunctor
имеет следующий ctor:
ResidualsFunctor(int,int,StaticEquilibriumSolver*)
Этот
f=shared_ptr<ResidualsFunctor>(new ResidualsFunctor(0,0,this)); // this is a StaticEquilibriumSolver*
компилируется просто отлично, тогда как
f=make_shared<ResidualsFunctor>(0,0,this);
говорит мне:
/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&&)
Это ошибка в бусте?В gcc?Моя вина, которую я не вижу?