Существует так много вопросов о сравнении двух указателей, но я не нашел ни одного вопроса о том, подходят ли два типа для сравнения указателей. Данный
A* a;
B* b;
Я хочу знать, действительно ли выражение a @ b
, где @
является одним из _4 _, _ 5 _, _ 6 _, _ 7 _, _ 8 _, _ 9_ (я не возражаю против nullptr_t
или любого другого типа, который может быть неявно преобразован в указатель). Это когда A, B
- равный?
- равны кроме резюме?
- в той же иерархии классов?
- ...?
Ничего не нашел в std::type_traits
. Я всегда могу провести свой собственный тест SFINAE, но я ищу правила, чтобы применять их напрямую. Думаю, компилятору будет проще, не так ли?
РЕДАКТИРОВАТЬ Чтобы еще раз прояснить: я сравниваю указатели, а не объекты, на которые они указывают. Я хочу знать заранее, когда a @ b
выдаст ошибку компилятора, а не каково будет его значение (истинное, ложное или неуказанное).