namespace CGAL {

/*!
\ingroup PkgPartition2Ref

Class that derives a traits class for `partition_is_valid_2()` from
a given traits class by defining the validity testing function object
in terms of a supplied template parameter.

\cgalModels{PartitionIsValidTraits_2}

\sa `CGAL::Is_convex_2<Traits>`
\sa `CGAL::Is_vacuously_valid<Traits>`
\sa `CGAL::Is_y_monotone_2<Traits>`
\sa `CGAL::Partition_traits_2<R>`

\cgalHeading{Example}

See the example presented with the function `optimal_convex_partition_2()`
for an illustration of the use of this traits class.

*/
template< typename Traits, typename PolygonIsValid >
class Partition_is_valid_traits_2 : Traits {
public:

/// \name Types
/// @{

/*!

*/
typedef PolygonIsValid Is_valid;

/*!

*/
typedef Traits::Point_2 Point_2;

/*!

*/
typedef Traits::Polygon_2 Polygon_2;

/*!

*/
typedef Traits::Less_xy_2 Less_xy_2;

/*!

*/
typedef Traits::Left_turn_2 Left_turn_2;

/*!

*/
typedef Traits::Orientation_2 Orientation_2;

/// @}

/// \name Operations
/// The constructors and member functions for creating instances of
/// the above types are inherited from `Traits`. In addition, the
/// following member function is defined:
/// @{

/*!
function returning an instance of `Is_valid`
*/
Is_valid
is_valid_object(const Traits& traits) const;

/// @}

}; /* end Partition_is_valid_traits_2 */
} /* end namespace CGAL */
