mirror of
https://github.com/fmtlib/fmt.git
synced 2026-06-15 08:26:13 +08:00
Provide reasonable default definition for is_contiguous
Signed-off-by: Vladislav Shchapov <vladislav@shchapov.ru>
This commit is contained in:
parent
2f18a88e68
commit
83c3684a8e
@ -593,7 +593,20 @@ template <typename T> class basic_appender;
|
||||
using appender = basic_appender<char>;
|
||||
|
||||
// Checks whether T is a container with contiguous storage.
|
||||
template <typename T> struct is_contiguous : std::false_type {};
|
||||
namespace detail {
|
||||
|
||||
template <typename T, typename Enable = void>
|
||||
struct is_contiguous_ : std::false_type {};
|
||||
|
||||
template <typename T>
|
||||
struct is_contiguous_<T, void_t<decltype(std::declval<T&>().data()),
|
||||
decltype(std::declval<T&>().size()),
|
||||
decltype(std::declval<T&>()[size_t{}])>>
|
||||
: std::true_type {};
|
||||
|
||||
} // namespace detail
|
||||
|
||||
template <typename T> struct is_contiguous : detail::is_contiguous_<T> {};
|
||||
|
||||
class context;
|
||||
template <typename OutputIt, typename Char> class generic_context;
|
||||
|
||||
@ -21,8 +21,10 @@
|
||||
#include <functional> // std::equal_to
|
||||
#include <iterator> // std::back_insert_iterator, std::distance
|
||||
#include <limits> // std::numeric_limits
|
||||
#include <list> // std::list
|
||||
#include <string> // std::string
|
||||
#include <type_traits> // std::is_same
|
||||
#include <vector> // std::vector
|
||||
|
||||
#include "gmock/gmock.h"
|
||||
|
||||
@ -876,6 +878,14 @@ FMT_BEGIN_NAMESPACE
|
||||
template <> struct is_contiguous<custom_container> : std::true_type {};
|
||||
FMT_END_NAMESPACE
|
||||
|
||||
TEST(base_test, is_contiguous) {
|
||||
EXPECT_TRUE((fmt::is_contiguous<custom_container>::value));
|
||||
EXPECT_TRUE((fmt::is_contiguous<std::string>::value));
|
||||
EXPECT_TRUE((fmt::is_contiguous<fmt::string_view>::value));
|
||||
EXPECT_TRUE((fmt::is_contiguous<std::vector<char>>::value));
|
||||
EXPECT_FALSE((fmt::is_contiguous<std::list<char>>::value));
|
||||
}
|
||||
|
||||
TEST(base_test, format_to_custom_container) {
|
||||
auto c = custom_container();
|
||||
fmt::format_to(std::back_inserter(c), "");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user