#include #include #include #include #include #include #include #include using std::tr1::bind; using std::tr1::placeholders::_1; struct foo { typedef std::vector datavec; datavec data; template foo(Sequence seq) { boost::fusion::for_each(seq, bind(&datavec::push_back, &data, _1)); } }; std::ostream &operator<<(std::ostream &out, const foo &f) { std::copy(f.data.begin(), f.data.end(), std::ostream_iterator(out, " ")); return out; } struct square { typedef int result_type; result_type operator()(int i) { return i*i; } }; int main(void) { // Compiles. foo myfoo(boost::fusion::vector(1, 2, 3)); std::cout << myfoo << "\n"; // Doesn't. foo myfoo_2(boost::fusion::transform( boost::fusion::vector(1, 2, 3), square())); std::cout << myfoo_2 << "\n"; return 0; }