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]
This commit is contained in:
Daniel James
2008-05-21 20:43:40 +00:00
parent 0be8004724
commit c85c8dbeef

View File

@ -81,6 +81,7 @@ namespace boost {
template<typename T> struct prime_list_template
{
static std::size_t const value[];
static std::ptrdiff_t const length;
};
template<typename T>
@ -92,13 +93,16 @@ namespace boost {
50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,
1610612741ul, 3221225473ul, 4294967291ul };
template<typename T>
std::ptrdiff_t const prime_list_template<T>::length = 28;
typedef prime_list_template<std::size_t> 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)