[/ Copyright (c) Vladimir Batov 2009-2014 Distributed under the Boost Software License, Version 1.0. See copy at http://www.boost.org/LICENSE_1_0.txt. ] [section:supporting_tools Supporting Tools] This section describes a few supporting tools written as part of ['Boost.Convert] but which might be useful in their own rights. [section BOOST_DECLARE_HAS_MEMBER] The BOOST_DECLARE_HAS_MEMBER macro allows to declare a trait which would then let introspect the existence of a class member (a data member or a member function) with the specified name. For example, the following declarations introduce `local::has_begin` and `local::has_funop` traits which then allow to test if the supplied class has respectively `begin` and `operator()` members: [has_member_declaration] Now these traits can be used as follows: [has_member_classes_tested] [has_member_usage] As it can be seen from the example the traits only check for the existence of a member (be that a data member or a member function) with the specified name. [endsect] [section BOOST_DECLARE_IS_CALLABLE] The BOOST_DECLARE_IS_CALLABLE macro extends the functonality provided by BOOST_DECLARE_HAS_MEMBER and allows to declare a trait which would then let introspect the existence of a named class member function ['callable with the supplied signature]. For example, the following declarations introduce `local::can_call_funop` and `local::can_call_func` traits: [is_callable_declaration] The traits allow to test if the supplied class has respectively `operator()` and `func()` member functions callable with the specified signature: [is_callable_classes_tested] [is_callable_usage1] [is_callable_usage2] As it can be seen from the example the traits check for the existence of a ['callable] member function but ['not necessarily of the specified signature]. Please check the ['Boost.TTI] library for the latter. [endsect] [section `boost::cnv::is_cnv`] TODO [endsect] [endsect]