\begin{ccRefConcept}{Point}
The concept of a {\em Point} is defined by a set of requirements on
the provision of certain types in a \ccc{Kernel}.

\ccRefines
\ccc{Kernel}

\ccNestedType{Object_list}{shall contain at least \ccc{Point_tag} and \ccc{Point_cartesian_const_iterator_tag}.}

\ccNestedType{Type<Point_tag>::type}{shall be CopyConstructible.}
\ccNestedType{Type<Point_cartesian_const_iterator_tag>::type}{shall be a forward iterator (except that it may return an rvalue) whose \ccc{value_type} is \ccc{Kernel::Type<Point_tag>::type}.}

\ccNestedType{Functor<Convert_ttag<Point_tag>>::type}{}
\ccNestedType{Functor<Construct_point_cartesian_const_iterator_tag>::type}{shall provide \ccc{Type<Point_cartesian_const_iterator_tag>::type operator()(Type<Point_tag>::type const&, Extremity_tag)const} where \ccc{Extemity_tag} is \ccc{Begin_tag} or \ccc{End_tag}.}
\ccNestedType{Functor<Compute_cartesian_coordinate_tag>::type}{shall provide \ccc{FT operator()(Type<Point_tag>::type,int k)const} which returns the $k$th Cartesian coordinate of the point.}
\ccNestedType{Functor<Point_dimension_tag>::type}{shall provide \ccc{int operator()(Type<Point_tag>::type)const} which returns the dimension of a point.}
\ccNestedType{Functor<Construct_ttag<Point_tag>>::type}{shall provide:\\
  \ccc{Type<Point_tag>::type operator()(int dim)const} which constructs a point at the origin;\\
  \ccc{Type<Point_tag>::type operator()()const} the same, when \ccc{Default_ambient_dimension} is known;\\
  \ccc{Type<Point_tag>::type operator()(Type<Point_tag>::type)const} which copies (???);\\
  \ccc{Type<Point_tag>::type operator()(Iter, Iter, Cartesian_tag)const} which reads the Cartesian coordinates from the iterators;\\
  \ccc{Type<Point_tag>::type operator()(Iter, Iter)const} same as above;\\
  \ccc{Type<Point_tag>::type operator()(FT...)const} which reads the Cartesian coordinates from the arguments, when \ccc{Default_ambient_dimension} is known.
}

\end{ccRefConcept}

