// Description: Element concept
// Documentation: algebra.txt
#ifndef PASTELSYS_ELEMENT_CONCEPT_H
#define PASTELSYS_ELEMENT_CONCEPT_H
#include "pastel/sys/concept/concept.h"
namespace Pastel
{
    //! A set element.
    /*!
   A set element is any type whose objects can 
   be compared with == and !=.
   */
    template <typename T>
    concept Element_Concept_ = requires(T t) {
        //! Returns whether left == right.
        {t == t} -> std::convertible_to<bool>;
        //! Returns whether left != right.
        {t != t} -> std::convertible_to<bool>;
    };
    template <typename T>
    concept Element_Concept = 
        Element_Concept_<RemoveCvRef<T>>;
}
#endif