File: is_converter.cpp

package info (click to toggle)
boost1.74 1.74.0%2Bds1-21
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 463,588 kB
  • sloc: cpp: 3,338,117; xml: 131,293; python: 33,088; ansic: 14,292; asm: 4,038; sh: 3,353; makefile: 1,193; perl: 1,036; yacc: 478; php: 212; ruby: 102; lisp: 24; sql: 13; csh: 6
file content (86 lines) | stat: -rw-r--r-- 3,329 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// 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 <boost/convert.hpp>
#include <boost/convert/detail/is_converter.hpp>
#include <boost/detail/lightweight_test.hpp>

using std::string;
using std::wstring;

namespace { namespace local
{
    typedef void not_converter01 (string const&);
    typedef void not_converter02 (int const&, string const&);
    typedef void not_converter03 ();
    typedef void     converter01 (int const&, boost::optional<string>&);
    typedef void     converter02 (double const&, boost::optional<string>&);

    struct converter11
    {
        void operator()(int const&, boost::optional<string>&) {}
        void operator()(double const&, boost::optional<string>&) {}
        void operator()(string const&, boost::optional<int>&) {}
    };
    struct converter12
    {
        template<typename TypeIn, typename TypeOut> void operator()(TypeIn const&, boost::optional<TypeOut>&) {}
    };
    struct converter13
    {
        void operator()(int const&, boost::optional<string>&) {}
    };
    struct converter14
    {
        void operator()(int const&, boost::optional<string>&) const {}
    };
    struct not_converter11
    {
    };
    struct not_converter12
    {
        void operator()() {}
    };
    struct not_converter13
    {
        void operator()(int const&, string const&) {}
    };
}}

int
main(int, char const* [])
{
    BOOST_TEST( (boost::cnv::is_cnv<local::converter01, int, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter01, double, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter01, short int, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter11, int, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter11, double, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter11, string, int>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter12, int, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter12, double, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter12, string, int>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter13, int, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter13, double, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter13, int, string>::value));
    BOOST_TEST( (boost::cnv::is_cnv<local::converter14, int, string>::value));
    BOOST_TEST(!(boost::cnv::is_cnv<local::converter13, string, int>::value));
    BOOST_TEST(!(boost::cnv::is_cnv<local::converter14, string, int>::value));

    BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter01, int, string>::value));
    BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter02, int, string>::value));
    BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter11, int, string>::value));
    BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter12, int, string>::value));
    BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter13, int, string>::value));

    return boost::report_errors();
}

#endif