【发布时间】:2011-08-01 08:39:45
【问题描述】:
我在使用boost::make_shared<T>(...) 时遇到 g++4.6 和 boost 1.42 的编译错误,而 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&&)
这是 boost 中的错误吗?在 gcc 中?我的错我看不出来?
【问题讨论】:
-
这看起来像是 Boost 的
std::forward和你的编译器之间的奇怪交互。您使用的是什么编译器版本,您使用的是什么版本的 Boost? -
问题中指定,g++4.6和boost 1.42。
标签: boost c++11 shared-ptr