Assert that both the underlying container and dynamic_bitset provide at least bidirectional iterators

The assert uses C++20 concepts, so it is only performed in C++20 or
later.

Note that, while evaluating the concept for the second assert, MSVC 2022
complained a constructor of class reference was private, therefore we
added a friend declaration.
This commit is contained in:
Gennaro Prota
2025-09-16 18:13:39 +02:00
parent 134fab263b
commit ff1a0fda26
2 changed files with 7 additions and 1 deletions

View File

@@ -24,6 +24,7 @@
#include "boost/dynamic_bitset_fwd.hpp"
#include "boost/limits.hpp"
#include <iosfwd>
#include <iterator>
#include <string>
#include <type_traits>
#include <vector>
@@ -197,6 +198,7 @@ public:
class reference
{
friend class dynamic_bitset< Block, AllocatorOrContainer >;
friend class bit_iterator< dynamic_bitset >;
//! The one and only non-copy ctor
// -------------------------------------------------------------------
@@ -294,6 +296,11 @@ public:
// -----------------------------------------------------------------------
typedef std::reverse_iterator< const_iterator > const_reverse_iterator;
#if __cplusplus >= 202002L
static_assert( std::bidirectional_iterator< typename buffer_type::iterator >, "AllocatorOrContainer doesn't provide at least BidirectionalIterators" );
static_assert( std::bidirectional_iterator< iterator > );
#endif
//! Constructs a bitset of size zero.
//!
//! \par Postconditions

View File

@@ -25,7 +25,6 @@
#include <algorithm>
#include <climits>
#include <istream>
#include <iterator>
#include <ostream>
#include <stdexcept>
#include <utility>