Skip to content

<xstd/bits/bit_concepts.hpp>

namespace xstd {
  // what holds the bits: one block, or a sized contiguous range of them, and the storage an owner grows
  template<class Bits>
    concept bit_blocks = see below;
  template<class Blocks>
    concept bit_storage = see below;

  // what a set owner asks of the mapping that places its keys in bits
  template<class Mapping, class Key>
    concept bit_index_mapping = see below;
  template<class Mapping, class Key>
    concept sized_bit_index_mapping = see below;
  template<class Mapping, class Key>
    concept bit_mask_mapping = see below;

  // blocks an owner takes as they are, and positions converted between any two widths
  template<class To, class Blocks>
    concept bit_constructible_from = see below;
  template<class From, class To>
    concept bit_convertible_to = see below;
}
Header Declares
<xstd/bits/bit_concepts/bit_blocks.hpp> bit_blocks
<xstd/bits/bit_concepts/bit_storage.hpp> bit_storage
<xstd/bits/bit_concepts/bit_index_mapping.hpp> bit_index_mapping
<xstd/bits/bit_concepts/sized_bit_index_mapping.hpp> sized_bit_index_mapping
<xstd/bits/bit_concepts/bit_mask_mapping.hpp> bit_mask_mapping
<xstd/bits/bit_concepts/bit_constructible_from.hpp> bit_constructible_from
<xstd/bits/bit_concepts/bit_convertible_to.hpp> bit_convertible_to

The umbrella exports each header below, in the three groups its comments mark. A concept whose definition names an exposition-only concept of the library's detail namespace writes see below there, and the bullets under it say what that concept asks. The three mapping concepts are cv-transparent in Key, as xstd-ints's concepts are: a cv-qualified key is asked about as the bare one.