diff --git a/include/fmt/ranges.h b/include/fmt/ranges.h index 0b6ec900..d65de361 100644 --- a/include/fmt/ranges.h +++ b/include/fmt/ranges.h @@ -154,8 +154,7 @@ struct has_const_begin_end< template struct has_mutable_begin_end< T, void_t())), - decltype(detail::range_end(std::declval())), - enable_if_t::value>>> + decltype(detail::range_end(std::declval()))>> : std::true_type {}; template diff --git a/test/ranges-test.cc b/test/ranges-test.cc index fa46fc41..ae069665 100644 --- a/test/ranges-test.cc +++ b/test/ranges-test.cc @@ -406,3 +406,16 @@ TEST(ranges_test, range_of_range_of_mixed_const) { TEST(ranges_test, vector_char) { EXPECT_EQ(fmt::format("{}", std::vector{'a', 'b'}), "['a', 'b']"); } + +TEST(ranges_test, range_of_noncopyable) { + struct V { + int i; + V(int v) : i(v) { } + V(V&&) = default; + auto operator=(V&&) -> V& = default; + + auto begin() -> int* { return &i; } + auto end() -> int* { return &i + 1; } + }; + EXPECT_EQ(fmt::format("{}", V(1)), "[1]"); +}