>>929
template<class F, class T, class A, template<class, class> class C,
class U = decltype(declval<F>()(declval<T>()))>
C<U, A> func(F f, const C<T, A> & c)
{
C<U, A> ret;
transform(c.cbegin(), c.cend(), back_inserter(ret), f);
return ret;
}