История изменений
Исправление fsb4000, (текущая версия) :
Ещё можно унифицировать, чтобы поддерживались и с помощью концептов и с помощью функций.
#if __cpp_concepts >= 201907L
template<typename T>
concept has_toString = requires(const T& t) {
t.toString();
};
#else // ^^ concepts / vv no concepts
template<typename T, typename=decltype(std::declval<T>().toString())>
constexpr bool has_toString_fun(T*)
{
return true;
}
constexpr bool has_toString_fun(...) {
return false;
}
template<typename T>
inline constexpr bool has_toString = has_toString_fun((T*)nullptr);
#endif // __cpp_concepts >= 201907L
https://gcc.godbolt.org/z/sxG19Evcr
Тогда, в будущем можно будет удалить вариант без концептов, без изменения кода который это использует…
Исправление fsb4000, :
Ещё можно унифицировать, чтобы поддерживались и с помощью концептов и с помощью функций.
#if __cpp_concepts >= 201907L
template<typename T>
concept has_toString = requires(const T& t) {
t.toString();
};
#else // ^^ concepts / vv no concepts
template<typename T, typename=decltype(std::declval<T>().toString())>
constexpr bool has_toString_fun(T*)
{
return true;
}
constexpr bool has_toString_fun(...) {
return false;
}
template<typename T>
constexpr bool has_toString = has_toString_fun((T*)nullptr);
#endif // __cpp_concepts >= 201907L
https://gcc.godbolt.org/z/oerEoK5zz
Тогда, в будущем можно будет удалить вариант без концептов, без изменения кода который это использует…
Исходная версия fsb4000, :
Ещё можно унифицировать, чтобы поддерживались и с помощью концептов и с помощью функций.
#if __cpp_concepts >= 201907L
template<typename T>
concept has_toString = requires(const T& t) {
t.toString();
};
#else // ^^ concepts / vv no concepts
template<typename T, typename=decltype(std::declval<T>().toString())>
constexpr bool has_toString_fun(T*)
{
return true;
}
constexpr bool has_toString_fun(...) {
return false;
}
template<typename T>
constexpr bool has_toString = has_toString_fun((T*)nullptr);
#endif // __cpp_concepts >= 201907L
https://gcc.godbolt.org/z/oerEoK5zz
Тогда, в будущем можно будет удалить код вариант без концептов, без изменения кода который это использует…