Стандарт предусматривает все операторы сравнения и оператор присваивания за pair
, обсуждался ли потенциал оператора добычи?
Например:
template <typename _Ty1, typename _Ty2>
enable_if_t<decltype(declval<istream&>() >> declval<_Ty1&>(), true_type())::value && decltype(declval<istream&>() >> declval<_Ty2&>(), true_type())::value, istream&> operator >> (istream& lhs, pair<_Ty1, _Ty2>& rhs) {
return lhs >> rhs.first >> rhs.second;
}
Очевидно, если это было использовано в то время как pair
содержащиеся типы, для которых оператор извлечения не был определен, это завершится ошибкой так же, как и сравнение pair
типы, которые не содержат операторов сравнения, потерпят неудачу.
Но только подумайте о радости того, чтобы иметь возможность течь в map
! Конечно, кто-то предложил это?
Задача ещё не решена.
Других решений пока нет …