template<typename T>
T add(T t1, T t2)
{
	return t1 + t2;
}
template<typename T> struct type{ };
template<> struct type<float>{ using type_t = float; };
template<> struct type<double>{ using type_t = double; };

template <typename T>
typename type<T>::type_t add(T t1, T t2)
{
	return t1 + t2;
}