mirror of
https://github.com/fmtlib/fmt.git
synced 2025-07-29 10:17:40 +02:00
Restore constraint on map formatter (#4326)
* Restore constraint on map formatter * Remove unnecessary double parens
This commit is contained in:
@ -527,7 +527,9 @@ struct formatter<
|
|||||||
template <typename R, typename Char>
|
template <typename R, typename Char>
|
||||||
struct formatter<
|
struct formatter<
|
||||||
R, Char,
|
R, Char,
|
||||||
enable_if_t<range_format_kind<R, Char>::value == range_format::map>> {
|
enable_if_t<conjunction<
|
||||||
|
bool_constant<range_format_kind<R, Char>::value == range_format::map>,
|
||||||
|
detail::is_formattable_delayed<R, Char>>::value>> {
|
||||||
private:
|
private:
|
||||||
using map_type = detail::maybe_const_range<R>;
|
using map_type = detail::maybe_const_range<R>;
|
||||||
using element_type = detail::uncvref_type<map_type>;
|
using element_type = detail::uncvref_type<map_type>;
|
||||||
|
@ -47,6 +47,8 @@ TEST(ranges_test, format_array_of_literals) {
|
|||||||
}
|
}
|
||||||
#endif // FMT_RANGES_TEST_ENABLE_C_STYLE_ARRAY
|
#endif // FMT_RANGES_TEST_ENABLE_C_STYLE_ARRAY
|
||||||
|
|
||||||
|
struct unformattable {};
|
||||||
|
|
||||||
TEST(ranges_test, format_vector) {
|
TEST(ranges_test, format_vector) {
|
||||||
auto v = std::vector<int>{1, 2, 3, 5, 7, 11};
|
auto v = std::vector<int>{1, 2, 3, 5, 7, 11};
|
||||||
EXPECT_EQ(fmt::format("{}", v), "[1, 2, 3, 5, 7, 11]");
|
EXPECT_EQ(fmt::format("{}", v), "[1, 2, 3, 5, 7, 11]");
|
||||||
@ -65,6 +67,9 @@ TEST(ranges_test, format_vector) {
|
|||||||
EXPECT_EQ(fmt::format("{:n}", vvc), "['a', 'b', 'c'], ['a', 'b', 'c']");
|
EXPECT_EQ(fmt::format("{:n}", vvc), "['a', 'b', 'c'], ['a', 'b', 'c']");
|
||||||
EXPECT_EQ(fmt::format("{:n:n}", vvc), "'a', 'b', 'c', 'a', 'b', 'c'");
|
EXPECT_EQ(fmt::format("{:n:n}", vvc), "'a', 'b', 'c', 'a', 'b', 'c'");
|
||||||
EXPECT_EQ(fmt::format("{:n:n:}", vvc), "a, b, c, a, b, c");
|
EXPECT_EQ(fmt::format("{:n:n:}", vvc), "a, b, c, a, b, c");
|
||||||
|
|
||||||
|
EXPECT_FALSE(fmt::is_formattable<unformattable>::value);
|
||||||
|
EXPECT_FALSE(fmt::is_formattable<std::vector<unformattable>>::value);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(ranges_test, format_nested_vector) {
|
TEST(ranges_test, format_nested_vector) {
|
||||||
@ -83,6 +88,8 @@ TEST(ranges_test, format_map) {
|
|||||||
auto m = std::map<std::string, int>{{"one", 1}, {"two", 2}};
|
auto m = std::map<std::string, int>{{"one", 1}, {"two", 2}};
|
||||||
EXPECT_EQ(fmt::format("{}", m), "{\"one\": 1, \"two\": 2}");
|
EXPECT_EQ(fmt::format("{}", m), "{\"one\": 1, \"two\": 2}");
|
||||||
EXPECT_EQ(fmt::format("{:n}", m), "\"one\": 1, \"two\": 2");
|
EXPECT_EQ(fmt::format("{:n}", m), "\"one\": 1, \"two\": 2");
|
||||||
|
|
||||||
|
EXPECT_FALSE((fmt::is_formattable<std::map<int, unformattable>>::value));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct test_map_value {};
|
struct test_map_value {};
|
||||||
@ -146,6 +153,7 @@ template <typename T> class flat_set {
|
|||||||
TEST(ranges_test, format_flat_set) {
|
TEST(ranges_test, format_flat_set) {
|
||||||
EXPECT_EQ(fmt::format("{}", flat_set<std::string>{"one", "two"}),
|
EXPECT_EQ(fmt::format("{}", flat_set<std::string>{"one", "two"}),
|
||||||
"{\"one\", \"two\"}");
|
"{\"one\", \"two\"}");
|
||||||
|
EXPECT_FALSE(fmt::is_formattable<flat_set<unformattable>>::value);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace adl {
|
namespace adl {
|
||||||
@ -169,8 +177,6 @@ TEST(ranges_test, format_pair) {
|
|||||||
EXPECT_EQ(fmt::format("{:n}", p), "421.5");
|
EXPECT_EQ(fmt::format("{:n}", p), "421.5");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct unformattable {};
|
|
||||||
|
|
||||||
TEST(ranges_test, format_tuple) {
|
TEST(ranges_test, format_tuple) {
|
||||||
auto t =
|
auto t =
|
||||||
std::tuple<int, float, std::string, char>(42, 1.5f, "this is tuple", 'i');
|
std::tuple<int, float, std::string, char>(42, 1.5f, "this is tuple", 'i');
|
||||||
@ -180,7 +186,6 @@ TEST(ranges_test, format_tuple) {
|
|||||||
EXPECT_EQ(fmt::format("{}", std::tuple<>()), "()");
|
EXPECT_EQ(fmt::format("{}", std::tuple<>()), "()");
|
||||||
|
|
||||||
EXPECT_TRUE((fmt::is_formattable<std::tuple<>>::value));
|
EXPECT_TRUE((fmt::is_formattable<std::tuple<>>::value));
|
||||||
EXPECT_FALSE((fmt::is_formattable<unformattable>::value));
|
|
||||||
EXPECT_FALSE((fmt::is_formattable<std::tuple<unformattable>>::value));
|
EXPECT_FALSE((fmt::is_formattable<std::tuple<unformattable>>::value));
|
||||||
EXPECT_FALSE((fmt::is_formattable<std::tuple<unformattable, int>>::value));
|
EXPECT_FALSE((fmt::is_formattable<std::tuple<unformattable, int>>::value));
|
||||||
EXPECT_FALSE((fmt::is_formattable<std::tuple<int, unformattable>>::value));
|
EXPECT_FALSE((fmt::is_formattable<std::tuple<int, unformattable>>::value));
|
||||||
@ -655,6 +660,8 @@ TEST(ranges_test, container_adaptor) {
|
|||||||
m.push(2);
|
m.push(2);
|
||||||
EXPECT_EQ(fmt::format("{}", m), "[1, 2]");
|
EXPECT_EQ(fmt::format("{}", m), "[1, 2]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPECT_FALSE(fmt::is_formattable<std::stack<unformattable>>::value);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct tieable {
|
struct tieable {
|
||||||
|
Reference in New Issue
Block a user