Я хочу использовать Windows HANDLE
(дескриптор потока) в качестве ключа для std::map
. Для этого мне нужен оператор меньше чем, который четко определен для типа HANDLE
.
Типы указателей T*
могут использоваться в качестве ключей для std::map
, только если компаратор std::less<T*>
указано, потому что встроенный operator<(T*, T*)
(и впредь std::less<>
) не обеспечивает полный порядок.
В процессе реализации мы знаем, что HANDLE
на самом деле определен как тип указателя. Поэтому std::less<HANDLE>
выглядит как безопасная ставка. Но я считаю, что это просто деталь реализации, которая HANDLE
реализована как тип указателя. (И, проверив фактические значения HANDLE
в отладчике, можно ясно увидеть, что они не являются подлинными значениями указателя.)
Существуют ли какие-либо формальные гарантии, которые можно извлечь из стандарта C ++ и Windows Документация API, которая позволила бы мне использовать HANDLE
в качестве ключа в std::map
?