/// @file
// Boost.Convert
-// Copyright (c) 2009-2016 Vladimir Batov.
+// Copyright (c) 2009-2020 Vladimir Batov.
//
// Many thanks to Julian Gonggrijp, Rob Stewart, Andrzej Krzemienski, Matus Chochlik, Jeroen Habraken,
// Hartmut Kaiser, Joel De Guzman, Thijs (M.A.) van den Berg, Roland Bock, Gavin Lambert, Paul Bristow,
#define BOOST_CONVERT_HPP
#include <boost/convert/detail/is_fun.hpp>
-#include <boost/ref.hpp>
+#include <boost/core/ref.hpp>
namespace boost
{
}
template<typename TypeOut, typename TypeIn, typename Converter, typename Fallback>
- typename enable_if<is_convertible<Fallback, TypeOut>, TypeOut>::type
+ typename std::enable_if<is_convertible<Fallback, TypeOut>::value, TypeOut>::type
convert(TypeIn const& value_in, Converter const& converter, Fallback const& fallback)
{
return convert<TypeOut>(value_in, converter).value_or(fallback);
}
template<typename TypeOut, typename TypeIn, typename Converter, typename Fallback>
- typename enable_if<cnv::is_fun<Fallback, TypeOut>, TypeOut>::type
+ typename std::enable_if<cnv::is_fun<Fallback, TypeOut>::value, TypeOut>::type
convert(TypeIn const& value_in, Converter const& converter, Fallback fallback)
{
return convert<TypeOut>(value_in, converter).value_or_eval(fallback);
template<typename Converter, typename TypeOut, typename TypeIn>
struct reference
{
- typedef reference this_type;
+ using this_type = reference;
- reference(Converter const& cnv) : converter_(cnv) {}
-
-#ifdef BOOST_CONVERT_CXX11
- reference(Converter&& cnv) : converter_(std::move(cnv)) {}
-#endif
+ reference (Converter const& cnv) : converter_(cnv) {}
+ reference (Converter&& cnv) : converter_(std::move(cnv)) {}
this_type&
value_or(TypeOut const& fallback)
}
TypeOut
- operator()(TypeIn const& value_in)
+ operator()(TypeIn const& value_in) const
{
optional<TypeOut> result = convert<TypeOut>(value_in, converter_);
return result ? result.get() : fallback_.value();
template<typename Converter, typename TypeOut>
struct reference<Converter, TypeOut, void>
{
- typedef reference this_type;
-
- reference(Converter const& cnv) : converter_(cnv) {}
+ using this_type = reference;
-#ifdef BOOST_CONVERT_CXX11
- reference(Converter&& cnv) : converter_(std::move(cnv)) {}
-#endif
+ reference (Converter const& cnv) : converter_(cnv) {}
+ reference (Converter&& cnv) : converter_(std::move(cnv)) {}
this_type&
value_or(TypeOut const& fallback)
template<typename TypeIn>
TypeOut
- operator()(TypeIn const& value_in)
+ operator()(TypeIn const& value_in) const
{
optional<TypeOut> result = convert<TypeOut>(value_in, converter_);
return result ? result.get() : fallback_.value();
/// @brief Boost.Convert deployment interface with algorithms
/// @details For example,
/// @code
- /// boost::array<char const*, 3> strs = {{ " 5", "0XF", "not an int" }};
- /// std::vector<int> ints;
- /// boost::cnv::cstream cnv;
+ /// std::array<char const*, 3> strs = {{ " 5", "0XF", "not an int" }};
+ /// std::vector<int> ints;
+ /// boost::cnv::cstream cnv;
///
/// cnv(std::hex)(std::skipws);
///
/// strs.begin(),
/// strs.end(),
/// std::back_inserter(ints),
- /// boost::cnv::apply<int>(boost::cref(cnv)).value_or(-1));
+ /// boost::cnv::apply<int>(std::cref(cnv)).value_or(-1));
/// @endcode
template<typename TypeOut, typename TypeIn, typename Converter>