mirror of
https://github.com/shadps4-emu/ext-fmt.git
synced 2024-11-23 09:49:42 +00:00
Specialize formatter
for all std::basic_string
types (#3943)
* Specialize `formatter` for all `std::basic_string` types * mock-allocator: add member types to make GCC 4.8 happy
This commit is contained in:
parent
400f6a8ee2
commit
cf1f55f798
@ -4017,11 +4017,14 @@ FMT_FORMAT_AS(unsigned short, unsigned);
|
|||||||
FMT_FORMAT_AS(long, detail::long_type);
|
FMT_FORMAT_AS(long, detail::long_type);
|
||||||
FMT_FORMAT_AS(unsigned long, detail::ulong_type);
|
FMT_FORMAT_AS(unsigned long, detail::ulong_type);
|
||||||
FMT_FORMAT_AS(Char*, const Char*);
|
FMT_FORMAT_AS(Char*, const Char*);
|
||||||
FMT_FORMAT_AS(std::basic_string<Char>, basic_string_view<Char>);
|
|
||||||
FMT_FORMAT_AS(std::nullptr_t, const void*);
|
FMT_FORMAT_AS(std::nullptr_t, const void*);
|
||||||
FMT_FORMAT_AS(detail::std_string_view<Char>, basic_string_view<Char>);
|
FMT_FORMAT_AS(detail::std_string_view<Char>, basic_string_view<Char>);
|
||||||
FMT_FORMAT_AS(void*, const void*);
|
FMT_FORMAT_AS(void*, const void*);
|
||||||
|
|
||||||
|
template <typename Char, typename Traits, typename Allocator>
|
||||||
|
class formatter<std::basic_string<Char, Traits, Allocator>, Char>
|
||||||
|
: public formatter<basic_string_view<Char>, Char> {};
|
||||||
|
|
||||||
template <typename Char, size_t N>
|
template <typename Char, size_t N>
|
||||||
struct formatter<Char[N], Char> : formatter<basic_string_view<Char>, Char> {};
|
struct formatter<Char[N], Char> : formatter<basic_string_view<Char>, Char> {};
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <iterator> // std::back_inserter
|
#include <iterator> // std::back_inserter
|
||||||
#include <list> // std::list
|
#include <list> // std::list
|
||||||
#include <mutex> // std::mutex
|
#include <mutex> // std::mutex
|
||||||
|
#include <string> // std::string
|
||||||
#include <thread> // std::thread
|
#include <thread> // std::thread
|
||||||
#include <type_traits> // std::is_default_constructible
|
#include <type_traits> // std::is_default_constructible
|
||||||
|
|
||||||
@ -2222,16 +2223,21 @@ template <typename Char, typename... T> void check_enabled_formatters() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(format_test, test_formatters_enabled) {
|
TEST(format_test, test_formatters_enabled) {
|
||||||
|
using custom_string =
|
||||||
|
std::basic_string<char, std::char_traits<char>, mock_allocator<char>>;
|
||||||
|
using custom_wstring = std::basic_string<wchar_t, std::char_traits<wchar_t>,
|
||||||
|
mock_allocator<wchar_t>>;
|
||||||
|
|
||||||
check_enabled_formatters<char, bool, char, signed char, unsigned char, short,
|
check_enabled_formatters<char, bool, char, signed char, unsigned char, short,
|
||||||
unsigned short, int, unsigned, long, unsigned long,
|
unsigned short, int, unsigned, long, unsigned long,
|
||||||
long long, unsigned long long, float, double,
|
long long, unsigned long long, float, double,
|
||||||
long double, void*, const void*, char*, const char*,
|
long double, void*, const void*, char*, const char*,
|
||||||
std::string, std::nullptr_t>();
|
std::string, custom_string, std::nullptr_t>();
|
||||||
check_enabled_formatters<wchar_t, bool, wchar_t, signed char, unsigned char,
|
check_enabled_formatters<
|
||||||
short, unsigned short, int, unsigned, long,
|
wchar_t, bool, wchar_t, signed char, unsigned char, short, unsigned short,
|
||||||
unsigned long, long long, unsigned long long, float,
|
int, unsigned, long, unsigned long, long long, unsigned long long, float,
|
||||||
double, long double, void*, const void*, wchar_t*,
|
double, long double, void*, const void*, wchar_t*, const wchar_t*,
|
||||||
const wchar_t*, std::wstring, std::nullptr_t>();
|
std::wstring, custom_wstring, std::nullptr_t>();
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(format_int_test, data) {
|
TEST(format_int_test, data) {
|
||||||
|
@ -20,6 +20,16 @@ template <typename T> class mock_allocator {
|
|||||||
using value_type = T;
|
using value_type = T;
|
||||||
using size_type = size_t;
|
using size_type = size_t;
|
||||||
|
|
||||||
|
using pointer = T*;
|
||||||
|
using const_pointer = const T*;
|
||||||
|
using reference = T&;
|
||||||
|
using const_reference = const T&;
|
||||||
|
using difference_type = ptrdiff_t;
|
||||||
|
|
||||||
|
template <typename U> struct rebind {
|
||||||
|
using other = mock_allocator<U>;
|
||||||
|
};
|
||||||
|
|
||||||
mock_allocator() {}
|
mock_allocator() {}
|
||||||
mock_allocator(const mock_allocator&) {}
|
mock_allocator(const mock_allocator&) {}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user