Согласно cppreference , std::type_info::operator!=
удаляется с помощью C ++ 20, однако std::type_info::operator==
, очевидно, остается.
В чем причина? Я мог бы согласиться с тем, что сравнение для неравенства бессмысленно, но тогда сравнение на равенство было бы столь же бессмысленным, не так ли?
Необходимость писать if(!(id1 == id2))
не делает какой-либо код более понятным по сравнению с if(id1 != id2)
, напротив, как раз наоборот ...
Нам не нужна библиотека, обеспеченная operator!=
больше. Обеспечение operator==
позволяет компилятору делать некоторое манипулирование и оценивать a != b
с точки зрения a == b
, все самостоятельно.
[over.match.oper]
3 Для унарного оператора с операндом типа, дисквалифицированная условной ценой версия которого является T1, и для бинарного оператора с левым операндом типа, дисквалифицированная условной ценой версия которого является T1 и правильным операндом типа, дисквалифицированная условной ценой версия которого является T2, четырьмя наборами функций кандидата, обозначенных членских кандидатов, не являющихся членом кандидатов, встроенные кандидаты и переписанные кандидаты, создаются следующим образом:
3.4.3 Для! = оператор ([expr.eq]), среди переписанных кандидатов все непереписанные кандидаты на выражение x == y.
std::type_info
и намного больше типов библиотеки удалили их operator!=
как часть P1614 - Mothership Приземлился .