Here is the code, Code: class IntSequence { public: IntSequence(int initialValue) : value(initialValue) {} int operator()() { return value++; } private: int value; }; int main() { list<int> coll; generate_n(back_inserter(coll), 9, IntSequence(1)); return 0; } In the call of generate_n, generator function IntSequence(1) with an int argument will call operator() but operator() doesn't have any arguments. I wander why? Also if I define operator() as the follows, Code: int operator()(int elem) { return value+elem; } How can I call generate_n?