Почему std::hash не был определен для std::weak_ptr в C++0x?

Прочитав обсуждение оператора‹ для std::weak_ptr, я не вижу причин, по которым определение std::hash для использования блока управления для std::weak_ptr не сработает. Я также не могу поверить, что это было проигнорировано комитетом по стандартам. Кто-нибудь читал соответствующее обсуждение по теме?

Изменить: обсуждение оператора‹ для std::weak_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html


person tgoodhart    schedule 20.01.2011    source источник


Ответы (2)


Я немного знаком с историей. Есть еще одна более поздняя статья, которую вы также должны прочитать:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2637.pdf

И я считаю, что этот более поздний документ — это то, что на самом деле находится в текущем проекте. Таким образом, в shared_ptr есть функции-члены operator‹() и, основанные на владении, owner_before. weak_ptr имеет только последнее.

Я думаю, что хэш-поддержка для weak_ptr просто была прекращена. Насколько мне известно, никто не предлагал поддержку хеширования для weak_ptr. Было очень много проблем при стандартизации C++0x, ограниченное количество времени и ресурсов для решения проблем, и, несомненно, будут ошибки и недостающие элементы.

Я также думаю, что для добавления поддержки хеширования для weak_ptr это должно быть сделано аналогично owner_before: добавьте функцию-член owner_hash как в shared_ptr, так и в weak_ptr. Я подозреваю, что уже слишком поздно делать это для C++0x, но это кажется правдоподобным предложением TR2.

person Howard Hinnant    schedule 23.01.2011
comment
Оказывается, Япония действительно сообщила об этом. - person SamB; 14.01.2014

Оказывается, на это жаловалась Япония (см. lwg issue 1406), и именно то, что Ховард предлагает в своем ответе, было предложено в качестве решения. К сожалению, он был отложен (предположительно из-за нехватки времени).

person SamB    schedule 13.01.2014