diff --git a/include/fmt/core.h b/include/fmt/core.h index 9b9a59c9..849890ab 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -356,11 +356,6 @@ template class back_insert_iterator { auto operator++(int) -> back_insert_iterator { return *this; } }; -template -auto back_inserter(Container& c) -> back_insert_iterator { - return {c}; -} - // An enable_if helper to be used in template parameters which results in much // shorter symbols: https://godbolt.org/z/sWw4vP. Extra parentheses are needed // to workaround a bug in MSVC 2019 (see #1140 and #1186). @@ -1061,7 +1056,7 @@ class iterator_buffer, : iterator_buffer(get_container(out)) {} auto out() -> back_insert_iterator { - return fmt::back_inserter(container_); + return back_inserter(container_); } }; @@ -1562,10 +1557,14 @@ struct is_output_iterator< It, T, void_t()++ = std::declval())>> : std::true_type {}; -template struct is_back_insert_iterator : std::false_type {}; -template -struct is_back_insert_iterator> - : std::true_type {}; +template +struct is_back_insert_iterator : std::false_type {}; +template +struct is_back_insert_iterator< + It, bool_constant())), + It>::value>> : std::true_type {}; // A type-erased reference to an std::locale to avoid a heavy include. class locale_ref { @@ -2873,7 +2872,7 @@ auto vformat_to(OutputIt out, string_view fmt, format_args args) -> OutputIt { **Example**:: auto out = std::vector(); - fmt::format_to(fmt::back_inserter(out), "{}", 42); + fmt::format_to(std::back_inserter(out), "{}", 42); \endrst */ template ::value)); } +TEST(core_test, is_back_insert_iterator) { + EXPECT_TRUE(fmt::detail::is_back_insert_iterator< + std::back_insert_iterator>::value); + EXPECT_FALSE(fmt::detail::is_back_insert_iterator< + std::front_insert_iterator>::value); +} + TEST(core_test, buffer_appender) { #ifdef __cpp_lib_ranges static_assert(std::output_iterator, char>);