#include #include #include namespace aux { template class initializer_list_holder { private: typename std::initializer_list::iterator data; typename std::initializer_list::size_type size; std::vector elems; void init(void) { // Yes, vector::data() is non-standard data = elems.data(); size = elems.size(); } public: initializer_list_holder(std::vector&& tmp) : elems(std::move(tmp)) { init(); } template initializer_list_holder(const StdRange& src) : elems(src.begin(), src.end()) { init(); } operator std::initializer_list() const { return reinterpret_cast< std::initializer_list const & >(*this); } }; } // namespace aux template class container { public: container(std::initializer_list init) { // TODO: do something more useful here for(auto i=init.begin(), e=init.end(); i!=e; ++i) { std::cout << *i << std::endl; } } }; aux::initializer_list_holder convert_input_data(void) { std::vector data; // TODO: here (instead doing this) get the data // from an external representation: XML, JSON, database, // GUI, etc. data.push_back(1); data.push_back(2); data.push_back(3); data.push_back(4); return std::move(data); } container make_int_container(void) { // Use the initializer-list-constructor here return container(convert_input_data()); } int main(void) { // make the container from external data container c = make_int_container(); return 0; }