Гарантируется ли в std :: equal_to вызов оператора == по умолчанию?

Я всегда думал, что стандарт требует неспецифического шаблона для std::equal_to<T> звонить T::operator==, но я заметил описание на cppreference.com почти подразумевает, что это наоборот; конечно это не упоминает это как требование. Я также проверил проект стандарта C33 11 N3337 и не нашел там никаких гарантий.

Если вы создаете класс с operator== ты бы надеялся, что он привыкнет при любых обстоятельствах.

Я не могу честно придумать способ реализации std::equal_to это не сработает, но я что-то упустил?

2

Решение

Гарантируется ли вызов std :: equal_to? operator == по умолчанию?

да.

Если не специализированный, equal_toоператор вызова будет вызывать operator ==, Из пункта 20.8.5 стандарта C ++ 11:

1 Библиотека предоставляет базовые классы объектов функций для всех операторов сравнения в языке (5.9, 5.10).

template <class T> struct equal_to
{
bool operator()(const T& x, const T& y) const;
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};

2 operator() возвращается x == y.

7

Другие решения

std::equal_to определяется как:

template <class T> struct equal_to {
bool operator()(const T& x, const T& y) const;
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};

operator() возвращается x == y,

Так что да, если T это тип класса с operator== Перегрузка, определенная для него как левый операнд, будет использоваться.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector