Fix handling of empty tuples (#1588)

This commit is contained in:
Victor Zverovich 2020-03-14 07:41:08 -07:00
parent 02bfd8a9a5
commit 61c5a51604
2 changed files with 7 additions and 7 deletions

View File

@ -13,6 +13,7 @@
#define FMT_RANGES_H_ #define FMT_RANGES_H_
#include <type_traits> #include <type_traits>
#include "format.h" #include "format.h"
// output only up to N items from the range. // output only up to N items from the range.
@ -104,10 +105,7 @@ struct is_range_<
/// tuple_size and tuple_element check. /// tuple_size and tuple_element check.
template <typename T> class is_tuple_like_ { template <typename T> class is_tuple_like_ {
template <typename U> template <typename U>
static auto check(U* p) static auto check(U* p) -> decltype(std::tuple_size<U>::value, int());
-> decltype(std::tuple_size<U>::value,
(void)std::declval<typename std::tuple_element<0, U>::type>(),
int());
template <typename> static void check(...); template <typename> static void check(...);
public: public:

View File

@ -10,6 +10,7 @@
// {fmt} support for ranges, containers and types tuple interface. // {fmt} support for ranges, containers and types tuple interface.
#include "fmt/ranges.h" #include "fmt/ranges.h"
#include "gtest.h" #include "gtest.h"
// Check if 'if constexpr' is supported. // Check if 'if constexpr' is supported.
@ -44,9 +45,10 @@ TEST(RangesTest, FormatPair) {
} }
TEST(RangesTest, FormatTuple) { TEST(RangesTest, FormatTuple) {
std::tuple<int64_t, float, std::string, char> tu1{42, 1.5f, "this is tuple", std::tuple<int64_t, float, std::string, char> t{42, 1.5f, "this is tuple",
'i'}; 'i'};
EXPECT_EQ("(42, 1.5, \"this is tuple\", 'i')", fmt::format("{}", tu1)); EXPECT_EQ("(42, 1.5, \"this is tuple\", 'i')", fmt::format("{}", t));
EXPECT_EQ("()", fmt::format("{}", std::tuple<>()));
} }
TEST(RangesTest, JoinTuple) { TEST(RangesTest, JoinTuple) {