C++0xのラムダ式でクロージャ

#include <iostream>
#include <functional>
#include <string>

int main()
{
    auto f =
        [](std::string &&str) -> std::function<void()> {
            std::string s_ = str;
            return
                [s_] () mutable -> void
                {
                    std::cout << s_ << std::endl;
                    s_ += std::string(" Hello");
                };
        };

    auto g = f("Message : ");

    for(int i = 0; i < 10; ++i) {
        g();
    }
}
Message : 
Message :  Hello
Message :  Hello Hello
Message :  Hello Hello Hello
Message :  Hello Hello Hello Hello
Message :  Hello Hello Hello Hello Hello
Message :  Hello Hello Hello Hello Hello Hello
Message :  Hello Hello Hello Hello Hello Hello Hello
Message :  Hello Hello Hello Hello Hello Hello Hello Hello
Message :  Hello Hello Hello Hello Hello Hello Hello Hello Hello

[追記]外側のラムダ式に不要なmutableが付いてた指摘を頂いたので修正[/追記]