
namespace CGAL {

/*!
\ingroup PkgAlgebraicFoundationsRef

An instance of `Coercion_traits` reflects the type coercion of the types 
<span class="textsc">A</span> and <span class="textsc">B</span>, it is symmetric in the two template arguments. 

\sa `ExplicitInteroperable` 
\sa `ImplicitInteroperable` 

*/
template< typename A, typename B >
struct Coercion_traits {

/// \name Types 
/// @{

/*!
Tag indicating whether the two types A and B are a model of `ExplicitInteroperable` 

This is either `CGAL::Tag_true` or `CGAL::Tag_false`. 
*/ 
typedef unspecified_type Are_explicit_interoperable; 

/*!
Tag indicating whether the two types A and B are a model of `ImplicitInteroperable` 

This is either `CGAL::Tag_true` or `CGAL::Tag_false`. 
*/ 
typedef unspecified_type Are_implicit_interoperable; 

/*!
The coercion type of `A` and `B`. 

In case A and B are not `ExplicitInteroperable` this is undefined. 
*/ 
typedef unspecified_type Type; 

/*!
A model of the `AdaptableFunctor` concept, providing the conversion of `A` or `B` to `Type`. 

In case A and B are not `ExplicitInteroperable` this is undefined. 
*/ 
typedef unspecified_type Cast; 

/// @}

}; /* end Coercion_traits */
} /* end namespace CGAL */
