summaryrefslogtreecommitdiff
path: root/boost/hana/ext/std/array.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/hana/ext/std/array.hpp')
-rw-r--r--boost/hana/ext/std/array.hpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/boost/hana/ext/std/array.hpp b/boost/hana/ext/std/array.hpp
index 0cb513073c..59bc49cf8d 100644
--- a/boost/hana/ext/std/array.hpp
+++ b/boost/hana/ext/std/array.hpp
@@ -149,13 +149,21 @@ BOOST_HANA_NAMESPACE_BEGIN
//////////////////////////////////////////////////////////////////////////
template <>
struct less_impl<ext::std::array_tag, ext::std::array_tag> {
- template <typename T, typename U>
- static constexpr auto apply(std::array<T, 0> const&, std::array<U, 0> const&)
- { return hana::false_c; }
-
template <typename T, std::size_t n, typename U, std::size_t m>
static constexpr auto apply(std::array<T, n> const& xs, std::array<U, m> const& ys) {
- return detail::lexicographical_compare(&xs[0], &xs[0] + n, &ys[0], &ys[0] + m);
+ // This logic is more complex than it needs to be because we can't
+ // use `.begin()` and `.end()`, which are not constexpr in C++14,
+ // and because `&arr[0]` is UB when the array is empty.
+ if (xs.empty()) {
+ return !ys.empty();
+ } else {
+ if (ys.empty()) {
+ return false;
+ } else {
+ return detail::lexicographical_compare(&xs[0], &xs[0] + n,
+ &ys[0], &ys[0] + m);
+ }
+ }
}
};
BOOST_HANA_NAMESPACE_END