From f9127593a9fd0ef585fed52f838d89c825b8cd72 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Sat, 21 Jan 2017 00:02:12 +0000 Subject: Implement P0513R0 - "Poisoning the Hash" Summary: Exactly what the title says. This patch also adds a `std::hash` specialization in C++17, but it was not added by this paper and I can't find the actual paper that adds it. See http://wg21.link/P0513R0 for more info. If there are no comments in the next couple of days I'll commit this Reviewers: mclow.lists, K-ballo, EricWF Reviewed By: EricWF Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D28938 llvm-svn: 292684 --- libcxx/include/variant | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'libcxx/include/variant') diff --git a/libcxx/include/variant b/libcxx/include/variant index 4396f1062f5..67d4e3c9992 100644 --- a/libcxx/include/variant +++ b/libcxx/include/variant @@ -1534,7 +1534,8 @@ auto swap(variant<_Types...>& __lhs, } template -struct _LIBCPP_TEMPLATE_VIS hash> { +struct _LIBCPP_TEMPLATE_VIS hash< + __enable_hash_helper, remove_const_t<_Types>...>> { using argument_type = variant<_Types...>; using result_type = size_t; @@ -1547,7 +1548,8 @@ struct _LIBCPP_TEMPLATE_VIS hash> { : __variant::__visit_alt( [](const auto& __alt) { using __alt_type = decay_t; - using __value_type = typename __alt_type::__value_type; + using __value_type = remove_const_t< + typename __alt_type::__value_type>; return hash<__value_type>{}(__alt.__value); }, __v); -- cgit v1.2.3