is_converter.cpp 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Boost.Convert test and usage example
  2. // Copyright (c) 2009-2016 Vladimir Batov.
  3. // Use, modification and distribution are subject to the Boost Software License,
  4. // Version 1.0. See http://www.boost.org/LICENSE_1_0.txt.
  5. #include "./test.hpp"
  6. #if defined(BOOST_CONVERT_IS_NOT_SUPPORTED)
  7. int main(int, char const* []) { return 0; }
  8. #else
  9. #include <boost/convert.hpp>
  10. #include <boost/convert/detail/is_converter.hpp>
  11. #include <boost/detail/lightweight_test.hpp>
  12. using std::string;
  13. using std::wstring;
  14. namespace { namespace local
  15. {
  16. typedef void not_converter01 (string const&);
  17. typedef void not_converter02 (int const&, string const&);
  18. typedef void not_converter03 ();
  19. typedef void converter01 (int const&, boost::optional<string>&);
  20. typedef void converter02 (double const&, boost::optional<string>&);
  21. struct converter11
  22. {
  23. void operator()(int const&, boost::optional<string>&) {}
  24. void operator()(double const&, boost::optional<string>&) {}
  25. void operator()(string const&, boost::optional<int>&) {}
  26. };
  27. struct converter12
  28. {
  29. template<typename TypeIn, typename TypeOut> void operator()(TypeIn const&, boost::optional<TypeOut>&) {}
  30. };
  31. struct converter13
  32. {
  33. void operator()(int const&, boost::optional<string>&) {}
  34. };
  35. struct converter14
  36. {
  37. void operator()(int const&, boost::optional<string>&) const {}
  38. };
  39. struct not_converter11
  40. {
  41. };
  42. struct not_converter12
  43. {
  44. void operator()() {}
  45. };
  46. struct not_converter13
  47. {
  48. void operator()(int const&, string const&) {}
  49. };
  50. }}
  51. int
  52. main(int, char const* [])
  53. {
  54. BOOST_TEST( (boost::cnv::is_cnv<local::converter01, int, string>::value));
  55. BOOST_TEST( (boost::cnv::is_cnv<local::converter01, double, string>::value));
  56. BOOST_TEST( (boost::cnv::is_cnv<local::converter01, short int, string>::value));
  57. BOOST_TEST( (boost::cnv::is_cnv<local::converter11, int, string>::value));
  58. BOOST_TEST( (boost::cnv::is_cnv<local::converter11, double, string>::value));
  59. BOOST_TEST( (boost::cnv::is_cnv<local::converter11, string, int>::value));
  60. BOOST_TEST( (boost::cnv::is_cnv<local::converter12, int, string>::value));
  61. BOOST_TEST( (boost::cnv::is_cnv<local::converter12, double, string>::value));
  62. BOOST_TEST( (boost::cnv::is_cnv<local::converter12, string, int>::value));
  63. BOOST_TEST( (boost::cnv::is_cnv<local::converter13, int, string>::value));
  64. BOOST_TEST( (boost::cnv::is_cnv<local::converter13, double, string>::value));
  65. BOOST_TEST( (boost::cnv::is_cnv<local::converter13, int, string>::value));
  66. BOOST_TEST( (boost::cnv::is_cnv<local::converter14, int, string>::value));
  67. BOOST_TEST(!(boost::cnv::is_cnv<local::converter13, string, int>::value));
  68. BOOST_TEST(!(boost::cnv::is_cnv<local::converter14, string, int>::value));
  69. BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter01, int, string>::value));
  70. BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter02, int, string>::value));
  71. BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter11, int, string>::value));
  72. BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter12, int, string>::value));
  73. BOOST_TEST(!(boost::cnv::is_cnv<local::not_converter13, int, string>::value));
  74. return boost::report_errors();
  75. }
  76. #endif