From c85c8dbeef6a393cdbeff41255d16f82e9bfd931 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Wed, 21 May 2008 20:43:40 +0000 Subject: [PATCH] Some compilers don't like the use of sizeof with a static template member array, so I'm hardcoding the prime number list length. Pity. [SVN r45620] --- include/boost/unordered/detail/hash_table.hpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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)