diff --git a/include/boost/unordered/detail/hash_table.hpp b/include/boost/unordered/detail/hash_table.hpp index f3eba852..234a9071 100644 --- a/include/boost/unordered/detail/hash_table.hpp +++ b/include/boost/unordered/detail/hash_table.hpp @@ -81,6 +81,7 @@ namespace boost { template struct prime_list_template { static std::size_t const value[]; + static std::ptrdiff_t const length; }; template @@ -92,13 +93,16 @@ namespace boost { 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul, 1610612741ul, 3221225473ul, 4294967291ul }; + template + std::ptrdiff_t const prime_list_template::length = 28; + typedef prime_list_template prime_list; // no throw inline std::size_t next_prime(std::size_t n) { std::size_t const* const prime_list_begin = prime_list::value; std::size_t const* const prime_list_end = prime_list_begin + - sizeof(prime_list::value) / sizeof(*prime_list::value); + prime_list::length; std::size_t const* bound = std::lower_bound(prime_list_begin, prime_list_end, n); if(bound == prime_list_end) @@ -110,7 +114,7 @@ namespace boost { inline std::size_t prev_prime(std::size_t n) { std::size_t const* const prime_list_begin = prime_list::value; std::size_t const* const prime_list_end = prime_list_begin + - sizeof(prime_list::value) / sizeof(*prime_list::value); + prime_list::length; std::size_t const* bound = std::upper_bound(prime_list_begin,prime_list_end, n); if(bound != prime_list_begin)