value comparison - deduct return type automatically (fixes MSVC C4800)

This commit is contained in:
artemp 2016-02-03 12:33:15 +01:00
parent 09163f969d
commit c0724a6d95

View file

@ -81,54 +81,60 @@ struct both_arithmetic : std::integral_constant<bool,
struct equals
{
template <typename T>
static bool apply(T const& lhs, T const& rhs)
static auto apply(T const& lhs, T const& rhs)
-> decltype(lhs == rhs)
{
return std::equal_to<T>()(lhs, rhs);
return lhs == rhs;
}
};
struct not_equal
{
template <typename T>
static bool apply(T const& lhs, T const& rhs)
static auto apply(T const& lhs, T const& rhs)
->decltype(lhs != rhs)
{
return std::not_equal_to<T>()(lhs, rhs);
return lhs != rhs;
}
};
struct greater_than
{
template <typename T>
static bool apply(T const& lhs, T const& rhs)
static auto apply(T const& lhs, T const& rhs)
->decltype(lhs > rhs)
{
return std::greater<T>()(lhs, rhs);
return lhs > rhs;
}
};
struct greater_or_equal
{
template <typename T>
static bool apply(T const& lhs, T const& rhs)
static auto apply(T const& lhs, T const& rhs)
->decltype(lhs >= rhs)
{
return std::greater_equal<T>()(lhs, rhs);
return lhs >= rhs;
}
};
struct less_than
{
template <typename T>
static bool apply(T const& lhs, T const& rhs)
static auto apply(T const& lhs, T const& rhs)
->decltype(lhs < rhs)
{
return std::less<T>()(lhs, rhs);
return lhs < rhs;
}
};
struct less_or_equal
{
template <typename T>
static bool apply(T const& lhs, T const& rhs)
static auto apply(T const& lhs, T const& rhs)
->decltype(lhs <= rhs)
{
return std::less_equal<T>()(lhs, rhs);
return lhs <= rhs;
}
};
@ -137,7 +143,7 @@ struct less_or_equal
template <typename Op, bool default_result>
struct comparison
{
// special case for unicode_strings
// special case for unicode_strings (fixes MSVC C4800)
bool operator() (value_unicode_string const& lhs,
value_unicode_string const& rhs) const
{