element_concept.h

Back to Algebra

pastel/sys/algebra/

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