ordered_element_concept.h

Back to Algebra

pastel/sys/algebra/

// Description: Ordered element concept
// Documentation: algebra.txt

#ifndef PASTELSYS_ORDERED_ELEMENT_CONCEPT_H
#define PASTELSYS_ORDERED_ELEMENT_CONCEPT_H

#include "pastel/sys/algebra/element_concept.h"

namespace Pastel
{

    //! An ordered-set element.
    /*! 
   An ordered-set is a set X together with
   a partial order < in X. The other relations
   >, <=, and >= are defined in the obvious
   way.
   */
    template <typename T>
    concept Ordered_Element_Concept_ =
        Element_Concept<T> && 
        requires(T t) {
            //! Returns whether left < right.
            {t < t} -> std::convertible_to<bool>;
            //! Returns whether left > right.
            {t > t} -> std::convertible_to<bool>;
            //! Returns whether left <= right.
            {t <= t} -> std::convertible_to<bool>;
            //! Returns whether left >= right.
            {t >= t} -> std::convertible_to<bool>;
    };

    template <typename T>
    concept Ordered_Element_Concept =
        Ordered_Element_Concept_<RemoveCvRef<T>>;

}

#endif