Почему std :: type_info :: operator! = Удалено в C ++ 20? - PullRequest
28 голосов
/ 10 октября 2019

Согласно cppreference , std::type_info::operator!= удаляется с помощью C ++ 20, однако std::type_info::operator==, очевидно, остается.

В чем причина? Я мог бы согласиться с тем, что сравнение для неравенства бессмысленно, но тогда сравнение на равенство было бы столь же бессмысленным, не так ли?

Необходимость писать if(!(id1 == id2)) не делает какой-либо код более понятным по сравнению сif(id1 != id2), напротив, как раз наоборот ...

1 Ответ

28 голосов
/ 10 октября 2019

Нам больше не нужна библиотека operator!=. Предоставление operator== позволяет компилятору выполнять некоторые манипуляции и оценивать a != b в терминах a == b, причем все это само по себе.

[over.match.oper]

3 Для унарного оператора @ с операндом типа, cv-неквалифицированная версия которого равна T1, и для бинарного оператора @ с левым операндом типа, cv-неквалифицированная версияэто T1, и правый операнд типа, чья безусловная версия cv равна T2, четыре набора функций-кандидатов, назначенные кандидаты в члены, кандидаты, не являющиеся членами, встроенные кандидаты и переписанные кандидаты, сконструированы следующим образом:

3.4.3 Для оператора! = ([Expr.eq]) переписанные кандидаты включают все не переписанные кандидаты для выражения x == y.

std::type_info и многие другие типы библиотек удалили operator!= как часть P1614 - Материнский корабль приземлился .

...