
Hi list, I found a small inconvenience while trying to use boost::assign::list_of with the following code #include <vector> #include <boost/assign/list_of.hpp> struct A { // no implicit conversion from int explicit A(int i) {} // constructor from two ints A(int i, int j) {} }; void works_with_two_ints() { std::vector<A> v = boost::assign::list_of<A>(1,2)(3,4)(5,6); } #if 0 void does_not_work_with_one_int() { std::vector<A> v = boost::assign::list_of<A>(1)(2)(3); } #endif Looking into the code, it seems as if assign_detail::generic_list<A> had two slightly different versions of operator() generated with some preprocessor magic // 1) accepts a fully constructed A generic_list& operator()( const A& u ) { this->push_back( u ); return *this; } // 2) accepts two generic paramenters forwarding them to A's two parameter constructor template <typename U, typename V> generic_list& operator()(const U& u, const V& v) { this->push_back( A(u,v) ); return *this; } I'm missing another operator() that takes one generic parameter and forwards it to A's one parameter constructor, for the case where it is not implicitly convertible. // 3) accepts a generic paramenter forwarding it to A's one parameter constructor template <typename U> generic_list& operator()(const U& u) { this->push_back( A(u) ); return *this; } That saves me from typing A's everywhere std::vector<A> v = boost::assign::list_of(A(1))(A(2))(A(3)); Does this make sense? Thanks!

dariomt@gmail.com skrev:
I think it does. Instead of adding a new function, I tried to replace the one argument one. I also tried adding both. It seems to break gcc 4.4 though. Not vc9. So until someone has found a way to make it work on gcc, I'm slightly concerned about adding it. -Thorsten
participants (2)
-
dariomt@gmail.com
-
Thorsten Ottosen