// Description: Point-type of a point-set
// DocumentationOf: pointset_concept.h
#ifndef PASTELSYS_POINTSET_POINT_H
#define PASTELSYS_POINTSET_POINT_H
#include "pastel/sys/pointset/pointset_concept.h"
#include "pastel/sys/pointset/pointset_point_id.h"
#include "pastel/sys/set/set_concept.h"
#include "pastel/sys/function/identity_function.h"
#include "pastel/sys/type_traits/remove_cvref.h"
#include <type_traits>
namespace Pastel
{
    template <
        typename PointSet,
        Requires<
            Models<PointSet, PointSet_Concept>
        > = 0
    >
    using PointSet_Point = 
        RemoveCvRef<decltype(*ranges::begin(std::declval<PointSet>()))>;
    template <
        typename PointSet,
        Requires<
            Models<PointSet, PointSet_Concept>
        > = 0
    >
    using PointSet_Point_F = 
        Identity_F<PointSet_Point<PointSet>>;
}
#endif