finite_integer_concept.h

Back to Integers

pastel/sys/integer/

// Description: Finite integer concept
// Documentation: integers.txt

#ifndef PASTELSYS_FINITE_INTEGER_CONCEPT_H
#define PASTELSYS_FINITE_INTEGER_CONCEPT_H

#include "pastel/sys/integer/integer_concept.h"

#include "pastel/sys/integer/native_finite_integer.h"

namespace Pastel 
{

    //! A finite integer.
    /*!
   A finite integer is an integer with a finite
   number of bits.
   */
    template <typename T>
    concept Finite_Integer_Concept_ = 
        Integer_Concept<T> && 
        requires(T t) {
        //! Returns the binary not of the element.
        {~t} -> std::convertible_to<T>;
        //! Returns the number of bits in 'that'.
        {bits(t)} -> std::convertible_to<integer>;
    };

    template <typename T>
    concept Finite_Integer_Concept = 
        Finite_Integer_Concept_<RemoveCvRef<T>>;

    using Finite_Integer_Archetype = integer;

}

#endif