\begin{ccRefFunctionObjectConcept}{AlgebraicStructureTraits::IntegralDivision}

\ccDefinition

\ccc{AdaptableBinaryFunction} providing an integral division. 

Integral division (a.k.a. exact division or division without remainder) maps 
ring elements $(x,y)$ to ring element $z$ such that $x = yz$ if such a $z$ 
exists (i.e. if $x$ is divisible by $y$). Otherwise the effect of invoking 
this operation is undefined. Since the ring represented is an integral domain, 
$z$ is uniquely defined if it exists. 

\ccRefines 

\ccc{AdaptableBinaryFunction} 

\ccTypes
\ccNestedType{result_type} 
        { Is \ccc{AlgebraicStructureTraits::Type}.}
\ccGlue
\ccNestedType{first_argument} 
        { Is \ccc{AlgebraicStructureTraits::Type}.}
\ccGlue
\ccNestedType{second_argument} 
        { Is \ccc{AlgebraicStructureTraits::Type}.}

\ccOperations
\ccCreationVariable{integral_division}
\ccThree{xxxxxxxxxxx}{xxxxxxxxxxx}{}

\ccMethod{result_type operator()(first_argument_type  x, 
                                 second_argument_type y);}
        { returns  $x/y$, this is an integral division. }


\ccMethod{template <class NT1, class NT2> result_type operator()(NT1  x, NT2  y);}
         {This operator is well defined if \ccc{NT1} and \ccc{NT2} are \ccc{ExplicitInteroperable} 
          with coercion type \ccc{AlgebraicStructureTraits::Type}. }

%\ccHasModels

\ccSeeAlso

\ccRefIdfierPage{AlgebraicStructureTraits}\\
\ccRefIdfierPage{AlgebraicStructureTraits::Divides}

\end{ccRefFunctionObjectConcept} 
