下編譯除非B0RKEN定義(像-DB0RKEN在命令行):「make_shared」不明確
#include <functional>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
using boost::shared_ptr;
using boost::make_shared;
using my_fn = std::function<void()>;
void foo()
{
my_fn fn = [](){};
#ifdef B0RKEN
shared_ptr<my_fn> k = make_shared<my_fn>(fn);
#else
shared_ptr<int> k = make_shared<int>(0);
#endif
}
好像升壓是玩一些有趣的遊戲,這可能是爲什麼這個代碼片段有這個問題。我不明白的是爲什麼它與shared_ptr<int>
但不是shared_ptr<my_fn>
。
我不關心我是否應該使用boost或std共享指針。
我從鐺++得到以下錯誤:
foo.cpp:15:24: error: call to 'make_shared' is ambiguous
shared_ptr<my_fn> k = make_shared<my_fn>(fn);
^~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:4670:1: note: candidate function [with _Tp =
std::__1::function<void()>, _Args = <std::__1::function<void()> &>]
make_shared(_Args&& ...__args)
^
/opt/local/include/boost/smart_ptr/make_shared_object.hpp:246:87: note: candidate function [with T = std::__1::function<void()>, Args =
<std::__1::function<void()> &>]
template< class T, class... Args > typename boost::detail::sp_if_not_array<T>::type make_shared(Args && ... args)
^
1 error generated.
而且從G ++:
foo.cpp: In function ‘void foo()’:
foo.cpp:15:45: error: call of overloaded ‘make_shared(my_fn&)’ is ambiguous
shared_ptr<my_fn> k = make_shared<my_fn>(fn);
^
foo.cpp:15:45: note: candidates are:
In file included from PATH_TO_TOOLCHAIN/boost-1.59.0/include/boost/smart_ptr/make_shared.hpp:15:0,
from PATH_TO_TOOLCHAIN/boost-1.59.0/include/boost/make_shared.hpp:15,
from foo.cpp:3:
PATH_TO_TOOLCHAIN/boost-1.59.0/include/boost/smart_ptr/make_shared_object.hpp:246:87: note: typename boost::detail::sp_if_not_array<T>::type boost::make_shared(Args&& ...) [with T = std::function<void()>; Args = {std::function<void()>&}; typename boost::detail::sp_if_not_array<T>::type = boost::shared_ptr<std::function<void()> >]
template< class T, class... Args > typename boost::detail::sp_if_not_array<T>::type make_shared(Args && ... args)
^
In file included from PATH_TO_TOOLCHAIN/gcc-4.9.3/include/c++/4.9.3/memory:82:0,
from PATH_TO_TOOLCHAIN/boost-1.59.0/include/boost/config/no_tr1/memory.hpp:21,
from PATH_TO_TOOLCHAIN/boost-1.59.0/include/boost/smart_ptr/shared_ptr.hpp:23,
from PATH_TO_TOOLCHAIN/boost-1.59.0/include/boost/shared_ptr.hpp:17,
from foo.cpp:2:
PATH_TO_TOOLCHAIN/gcc-4.9.3/include/c++/4.9.3/bits/shared_ptr.h:600:5: note: std::shared_ptr<_Tp1> std::make_shared(_Args&& ...) [with _Tp = std::function<void()>; _Args = {std::function<void()>&}]
make_shared(_Args&&... __args)
^
什麼編譯器,什麼錯誤信息,什麼boost版本? – rhashimoto
你有'使用命名空間std'或'使用std :: makes_shared'嗎? –