// Copyright (c) 2017 GeometryFactory (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org) // // $URL: https://github.com/CGAL/cgal/blob/v5.1/Kernel_23/include/CGAL/Has_conversion.h $ // $Id: Has_conversion.h 52164b1 2019-10-19T15:34:59+02:00 Sébastien Loriot // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Mael Rouxel-Labbé #ifndef CGAL_HAS_CONVERSION_H #define CGAL_HAS_CONVERSION_H #include #include #include namespace CGAL { namespace internal { template struct Converter_selector { CGAL_static_assertion_msg((boost::is_same::value), "Kernels must have the same representation"); typedef CGAL::Cartesian_converter type; }; template struct Converter_selector { CGAL_static_assertion_msg((boost::is_same::value), "Kernels must have the same representation"); typedef CGAL::Homogeneous_converter type; }; } // namespace internal /// Check whether Cartesian/Homogeneous_converter provides either /// of the following conversions: /// /// -- K2T operator()(const K1T& ) const /// -- const K2T& operator()(const K1T& ) const /// /// \pre K1 and K2 are kernels with the same representation tag /// \pre K1T is a typedef in K1 /// \pre K2T is a typedef in K2 template class Has_conversion { typedef char one; typedef struct { char arr[2]; } two; template struct Wrapper { }; template static one test(Wrapper*); template static one test(Wrapper*); template static two test(...); public: static const bool value = sizeof(test::type, K1T, K2T >(0)) == 1; }; } // namespace CGAL #endif // CGAL_HAS_CONVERSION_H