¿Cuál sería una buena implementación de iota_n (falta el algoritmo de la STL)?

Con C ++ 11, el STL tiene ahora unstd::iota función (ver unreferencia). En contraste constd::fill_n, std::generate_n, no haystd::iota_n, sin embargo. ¿Cuál sería una buena implementación para eso? Un bucle directo (alternativa 1) o delegación astd::generate_n con una expresión lambda simple (alternativa 2)?

Alternativa 1)

template<class OutputIterator, class Size, class T>
OutputIterator iota_n(OutputIterator first, Size n, T value)
{
        while (n--)
                *first++ = value++;
        return first;
}

Alternativa 2)

template<class OutputIterator, class Size, class T>
OutputIterator iota_n(OutputIterator first, Size n, T value)
{
        return std::generate_n(first, n, [&](){ return value++; });
}    

¿Generarían ambas alternativas código equivalente con compiladores optimizados?

ACTUALIZAR: incorporó el excelente punto de @Marc Mutz para devolver también el iterador a su punto de destino. Así es comostd::generate_n Se actualizó en C ++ 11 en comparación con C ++ 98.

Respuestas a la pregunta(2)

Su respuesta a la pregunta