diff --git a/include/fmt/ranges.h b/include/fmt/ranges.h index 75666d1cd755..8f8971c38551 100644 --- a/include/fmt/ranges.h +++ b/include/fmt/ranges.h @@ -132,8 +132,8 @@ struct has_const_begin_end< template struct has_mutable_begin_end< - T, void_t())), - decltype(detail::range_end(std::declval())), + T, void_t())), + decltype(detail::range_end(std::declval())), // the extra int here is because older versions of MSVC don't // SFINAE properly unless there are distinct types int>> : std::true_type {}; diff --git a/test/ranges-test.cc b/test/ranges-test.cc index 2d7551292142..4eafcbe1f7e3 100644 --- a/test/ranges-test.cc +++ b/test/ranges-test.cc @@ -592,3 +592,14 @@ auto format_as(const tieable& t) -> std::tuple { TEST(ranges_test, format_as_tie) { EXPECT_EQ(fmt::format("{}", tieable()), "(3, 0.42)"); } + +struct lvalue_qualified_begin_end { + int arr[5] = {1, 2, 3, 4, 5}; + + int const* begin() & { return arr; } + int const* end() & { return arr + 5; } +}; + +TEST(ranges_test, lvalue_qualified_begin_end) { + EXPECT_EQ(fmt::format("{}", lvalue_qualified_begin_end{}), "[1, 2, 3, 4, 5]"); +}