Почему std :: type_info :: operator! = Удалено в C ++ 20?

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

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

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

20
задан StoryTeller 10 October 2019 в 10:12
поделиться

1 ответ

Нам не нужна библиотека, обеспеченная 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 Приземлился .

29
ответ дан 28 November 2019 в 03:45
поделиться