#include <boost/lexical_cast.hpp>
#include <boost/core/lightweight_test.hpp>
struct oops {
operator int () const {
return 41;
}
};
inline std::ostream& operator<<(std::ostream& os, const oops&) {
return os << 42;
}
struct oops2 {
operator double () const {
return 1.12;
}
};
inline std::ostream& operator<<(std::ostream& os, const oops2&) {
return os << 2;
}
struct Value {
explicit Value(double x) : x(x) {}
operator double() const {
return x;
}
double x;
};
int main() {
BOOST_TEST_EQ(boost::lexical_cast<int>(oops{}), 42);
BOOST_TEST_EQ(boost::lexical_cast<std::string>(oops{}), "42");
BOOST_TEST_EQ(boost::lexical_cast<double>(oops2{}), 2);
BOOST_TEST_EQ(boost::lexical_cast<std::string>(oops2{}), "2");
Value longer_that_1_digit(128);
BOOST_TEST_EQ(boost::lexical_cast<std::string>(longer_that_1_digit), "128");
const double precision_more_than_6_digits = 1.23456789123;
BOOST_TEST_NE(
boost::lexical_cast<std::string>(Value(precision_more_than_6_digits)),
boost::lexical_cast<std::string>(precision_more_than_6_digits)
);
return boost::report_errors();
}