#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(Iterator begin, Iterator end) : data(begin, end) {} }; std::ostream &operator<<(std::ostream &out, const foo &f) { std::copy(f.data.begin(), f.data.end(), std::ostream_iterator(out, " ")); return out; } int main(void) { std::vector source; source.push_back(1); source.push_back(2); source.push_back(3); // Compiles. foo myfoo(source.begin(), source.end()); std::cout << myfoo << "\n"; // Doesn't. boost::fusion::vectorsource_2(1, 2, 3); foo myfoo_2(boost::fusion::begin(source_2), boost::fusion::end(source_2)); std::cout << myfoo_2 << "\n"; return 0; }