Skip to content

Commit 5f956f9

Browse files
committed
Provide reasonable default definition for is_contiguous
1 parent d2a159f commit 5f956f9

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

include/fmt/base.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,8 +587,21 @@ using string_view = basic_string_view<char>;
587587
template <typename T> class basic_appender;
588588
using appender = basic_appender<char>;
589589

590+
namespace detail {
591+
590592
// Checks whether T is a container with contiguous storage.
591-
template <typename T> struct is_contiguous : std::false_type {};
593+
template <typename T>
594+
auto is_contiguous_helper(int)
595+
-> decltype(std::declval<T&>().data(), std::declval<T&>().size(),
596+
std::declval<T&>().resize(size_t{}),
597+
std::declval<T&>()[size_t{}], std::true_type{});
598+
599+
template <typename T> auto is_contiguous_helper(...) -> std::false_type;
600+
601+
} // namespace detail
602+
603+
template <typename T>
604+
struct is_contiguous : decltype(detail::is_contiguous_helper<T>(0)) {};
592605

593606
class context;
594607
template <typename OutputIt, typename Char> class generic_context;

0 commit comments

Comments
 (0)