\begin{ccRefFunctionObjectConcept}{AlgebraicStructureTraits::Gcd} \ccDefinition \ccc{AdaptableBinaryFunction} providing the gcd. The greatest common divisor ($gcd$) of ring elements $x$ and $y$ is the unique ring element $d$ (up to a unit) with the property that any common divisor of $x$ and $y$ also divides $d$. (In other words: $d$ is the greatest lower bound of $x$ and $y$ in the partial order of divisibility.) We demand the $gcd$ to be unit-normal (i.e. have unit part 1). $gcd(0,0)$ is defined as $0$, since $0$ is the greatest element with respect to the partial order of divisibility. This is because an element $a \in R$ is said to divide $b \in R$, iff $\exists r \in R$ such that $a \cdot r = b$. Thus, $0$ is divided by every element of the Ring, in particular by itself. \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{gcd} \ccThree{xxxxxxxxxxx}{xxxxxxxxxxx}{} \ccMethod{result_type operator()(first_argument_type x, second_argument_type y);} { returns $gcd(x,y)$. } \ccMethod{template 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} \end{ccRefFunctionObjectConcept}