Listing #1:
#include <algorithm>
#include <iostream>
#include <type_traits>
#include <initializer_list>
template <typename... Ts>
auto min(Ts... ts) -> typename std::common_type<Ts...>::type {
return std::min({static_cast<typename std::common_type<Ts...>::type>(ts)...});