Metaprograming: Failure of Function Definition Defines a Separate Function

Using Walter Brown’s void_t:

template <typename...>
using void_t = void;

It’s very easy to make such a type trait:

template<typename T, typename = void>
struct has_to_string
: std::false_type { };

template<typename T>
struct has_to_string<T, 
    void_t<decltype(std::to_string(std::declval<T>()))>
    > 
: std::true_type { };

Leave a Comment