Questo mi chiarisce molte cose. Grazie shodan.Nulla ti vieta di farlo, ma le variabili _a e _b devi passarle come parametri del template. Ricorda che la funzione non deve accettare parametri (nemmeno template) per essere usata con std::generate(). Se preferisci utilizzare un ciclo allora puoi utilizzare una funzione normale senza scomodare i template.
In altre parole, gli algoritmi usati da STL richiedono determinate cose e se vuoi usarli devi implementare queste cose come vogliono loro. Ne più ne meno di qualsiasi altra funzione di libreria.