From 483eb2f56657e8e7f419ab1a4fab8dce9ade8609 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 20:24:20 +0200 Subject: Adding upstream version 14.2.21. Signed-off-by: Daniel Baumann --- src/boost/libs/convert/test/sfinae.cpp | 159 +++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 src/boost/libs/convert/test/sfinae.cpp (limited to 'src/boost/libs/convert/test/sfinae.cpp') diff --git a/src/boost/libs/convert/test/sfinae.cpp b/src/boost/libs/convert/test/sfinae.cpp new file mode 100644 index 00000000..5236a4d6 --- /dev/null +++ b/src/boost/libs/convert/test/sfinae.cpp @@ -0,0 +1,159 @@ +// 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 -- cgit v1.2.3