// Boost.Convert test and usage example // Copyright (c) 2009-2016 Vladimir Batov. // Use, modification and distribution are subject to the Boost Software License, // Version 1.0. See http://www.boost.org/LICENSE_1_0.txt. #include "./test.hpp" #if defined(BOOST_CONVERT_IS_NOT_SUPPORTED) int main(int, char const* []) { return 0; } #else #include #include #include #include //[is_callable_declaration namespace { namespace local { BOOST_DECLARE_IS_CALLABLE(can_call_funop, operator()); BOOST_DECLARE_IS_CALLABLE(can_call_func, func); }} //] //[is_callable_classes_tested namespace { namespace callable { struct test1 { int operator()(double, std::string) { return 0; }}; struct test2 { void operator()(double, std::string) {}}; struct test3 { void operator()(int) {}}; struct test4 { std::string operator()(int) const { return std::string(); }}; struct test5 { std::string operator()(int, std::string const& =std::string()) const { return std::string(); }}; struct test6 { template std::string operator()(T) const { return std::string(); }}; struct test7 { template T operator()(T) const { return T(); }}; struct test11 { int func(double, std::string) { return 0; }}; struct test12 { void func(double, std::string) {}}; struct test13 { void func(int) {}}; struct test14 { std::string func(int) const { return std::string(); }}; struct test15 { std::string func(int, std::string const& =std::string()) const { return std::string(); }}; struct test16 { template std::string func(T) const { return std::string(); }}; struct test17 { template T func(T) const { return T(); }}; }} //] static void test_is_callable() { // C1. Unfortunately, passing 'double' where 'int' is expected returns 'true'. // The same as the following (which successfully compiles): // void fun(int) {} // fun(double(1)); //[is_callable_usage1 BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == false)); BOOST_TEST((local::can_call_funop::value == false)); BOOST_TEST((local::can_call_funop::value == false)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); //] BOOST_TEST((local::can_call_funop::value == true)); //C1 BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == false)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == false)); BOOST_TEST((local::can_call_funop::value == false)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == false)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); BOOST_TEST((local::can_call_funop::value == true)); //[is_callable_usage2 BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == false)); BOOST_TEST((local::can_call_func::value == false)); BOOST_TEST((local::can_call_func::value == false)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); //] BOOST_TEST((local::can_call_func::value == true)); //C1 BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == false)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == false)); BOOST_TEST((local::can_call_func::value == false)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == false)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); BOOST_TEST((local::can_call_func::value == true)); } int main(int, char const* []) { //[is_callable_usage //] test_is_callable(); BOOST_TEST(boost::cnv::is_string::value == false); BOOST_TEST(boost::cnv::is_string::value == true); BOOST_TEST(boost::cnv::is_string::value == true); BOOST_TEST(boost::cnv::is_string::value == true); BOOST_TEST(boost::cnv::is_string::value == false); return boost::report_errors(); } #endif