После многочасовых экспериментов удалось догадаться только вот до такого:
template<typename V, typename Cb>
auto apply(V vec, Cb&& callback) -> vector<decltype(callback(*vec.begin()))>
{
vector<decltype(callback(*vec.begin()))> result;
for (auto &e: vec) result.push_back(callback(e));
return result;
}
// Использование:
map<string, string> hash;
auto result = apply(hash, [](const pair<string,string>& e) { return e.first + "=>" + e.second; });
Нет ли более изящного решения? А то decltype(callback(*vec.begin())) в заголовке функции — просто жесть, но по-другому никак не получается (в том числе и через result_of).
P.S.
Вообще, удивительно, в Perl'е (да и в других языках) функции типа map и grep очень популярны, но все мои попытки найти аналоги в C++0x не увенчались успехом — вот, пришлось придумать такую страшилу.