我正在尝试这样做:
class bbb
{
public:
bbb(std::list<int> lst) { }
};
int main()
{
bbb b((std::list<int>)boost::assign::list_of<int>(10)(10));
return 0;
}
并从g ++中获取以下错误:
some.cc:35: error: call of overloaded 'bbb(boost::assign_detail::generic_list<int>&)' is ambiguous
some.cc:15: note: candidates are: bbb::bbb(std::list<int, std::allocator<int> >)
some.cc:13: note: bbb::bbb(const bbb&)
有什么方法可以解决这个问题吗? 请注意,我使用的是gcc 4.4.6。它不支持整个c ++ 11,所以我正在编译c ++ 03。
...谢谢
答案 0 :(得分:0)
代码由VC ++ 2010编译。我找到了2个GCC的解决方法(参见下面的代码)。我认为代码没有任何差异,这将由优化的编译器生成,但我更喜欢第一个变体。我不知道转换运算符不起作用的原因。尝试在boost论坛上回答。
class bbb
{
public:
bbb(std::list<int> lst) { }
};
int main()
{
//simplest decision
std::list<int> tmp = boost::assign::list_of<int>(10)(10);
bbb b(tmp);
// one line decision
bbb b3((boost::assign::list_of<int>(10)(10)).operator std::list<int> () );
//compiled by VC++ 2010 !!!
bbb b4((std::list<int>)(boost::assign::list_of<int>(10)(10)) );
return 0;
}