What would be the best way to write something like for (auto&& x : discreture::combinations(_N, 3)) { myclass = converter(x); } or even better for (auto&& x : mywrapper(_N, 3)) { myclass = x; } where mywrapper could be something like: class mywrapper { private: decltype(..... discreture::lex_combinations...) lc; public: size_type size() const { return lc.size(); but I just find hard to write the signature of converter(x); thanks