#include <vector>
#include <iostream>
template<typename T>
struct MapTtoT { typedef T (type)(const T); };
template<typename F, typename T>
auto map_vec(F&& fnc, const std::vector<T>& source) -> decltype(void(fnc(std::declval<T>())), std::vector<T>())
{
std::vector<T> dest;
dest.reserve(source.size());
for (const auto i : source)
{
dest.emplace_back(fnc(i));
}
return dest;
}
template<typename T>
struct MapTandVectoT { typedef T (type)(const T, const std::vector<T>&); };
template<typename F, typename T>
auto map_vec(F&& fnc, const std::vector<T>& source) -> decltype(void(fnc(std::declval<T>(), source)), std::vector<T>())
{
std::vector<T> dest;
dest.reserve(source.size());
for (const auto i : source)
{
dest.emplace_back(fnc(i, source));
}
return dest;
}
class AddNum
{
public:
AddNum(const int num) : num_(num) {}