Qual seria uma boa implementação do iota_n (falta de algoritmo do STL)

Com o C ++ 11, o STL tem agorastd::iota função (verreferência). Em contraste comstd::fill_n, std::generate_n, não hástd::iota_n, Contudo. Qual seria uma boa implementação para isso? Um loop direto (alternativa 1) ou delegação parastd::generate_n com uma expressão lambda simples (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++; });
}    

As duas alternativas gerariam código equivalente com otimizadores de compiladores?

ATUALIZAR: incorporou o excelente ponto de @Marc Mutz para também devolver o iterador em seu ponto de destino. Este também é comostd::generate_n&nbsp;foi atualizado em C ++ 11 em comparação com C + + 98.