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 { };

tech