// 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