#include <iostream>
#include <type_traits>

template <typename T, typename = void>
struct SH_trait
{
    typedef std::string type;
};

template <typename T>
struct SH_trait<T, typename std::enable_if<std::is_integral<T>::value>::type>
{
    typedef double type;
};

int main()
{
    static_assert( std::is_same<SH_trait<int>::type, double>::value, "" );
}