Учитывая следующее рабочее решение:
template<typename T, typename = void>
struct has_value_t : std::false_type { };
template<typename T>
struct has_value_t<T, decltype(T::value, void())> : std::true_type { };
template<typename T>
constexpr bool has_value = has_value_t<T>::value;
Идея была взята из { ссылка }
Интересно, есть ли C ++ 17/20 больше лаконий c способ добиться того же эффекта. Как
template<typename T>
constexpr bool has_value = .....;
Использование:
template<typename T>
enable_if_t<has_value<T>,
std::ostream&> operator<<(std::ostream& os, T const& arg)
{
return os << arg.value;
}