mirror of
https://github.com/fmtlib/fmt.git
synced 2025-01-07 13:20:05 +00:00
Workaround an issue with mixing std versions in gcc (#2017)
This commit is contained in:
parent
5555651ce0
commit
f81c14aa1e
@ -1174,8 +1174,8 @@ template <typename T = void> struct null {};
|
||||
template <typename Char> struct fill_t {
|
||||
private:
|
||||
enum { max_size = 4 };
|
||||
Char data_[max_size];
|
||||
unsigned char size_;
|
||||
Char data_[max_size] = {Char(' '), Char(0), Char(0), Char(0)};
|
||||
unsigned char size_ = 1;
|
||||
|
||||
public:
|
||||
FMT_CONSTEXPR void operator=(basic_string_view<Char> s) {
|
||||
@ -1195,13 +1195,6 @@ template <typename Char> struct fill_t {
|
||||
FMT_CONSTEXPR const Char& operator[](size_t index) const {
|
||||
return data_[index];
|
||||
}
|
||||
|
||||
static FMT_CONSTEXPR fill_t<Char> make() {
|
||||
auto fill = fill_t<Char>();
|
||||
fill[0] = Char(' ');
|
||||
fill.size_ = 1;
|
||||
return fill;
|
||||
}
|
||||
};
|
||||
} // namespace detail
|
||||
|
||||
@ -1233,8 +1226,7 @@ template <typename Char> struct basic_format_specs {
|
||||
type(0),
|
||||
align(align::none),
|
||||
sign(sign::none),
|
||||
alt(false),
|
||||
fill(detail::fill_t<Char>::make()) {}
|
||||
alt(false) {}
|
||||
};
|
||||
|
||||
using format_specs = basic_format_specs<char>;
|
||||
|
@ -355,22 +355,20 @@ TEST(MemoryBufferTest, ExceptionInDeallocate) {
|
||||
}
|
||||
|
||||
template <typename Allocator, size_t MaxSize>
|
||||
class allocator_max_size: public Allocator {
|
||||
class allocator_max_size : public Allocator {
|
||||
public:
|
||||
using typename Allocator::value_type;
|
||||
size_t max_size() const FMT_NOEXCEPT {
|
||||
return MaxSize;
|
||||
}
|
||||
size_t max_size() const FMT_NOEXCEPT { return MaxSize; }
|
||||
value_type* allocate(size_t n) {
|
||||
if (n > max_size()) {
|
||||
throw std::length_error("size > max_size");
|
||||
}
|
||||
return std::allocator_traits<Allocator>::allocate(
|
||||
*static_cast<Allocator *>(this), n);
|
||||
*static_cast<Allocator*>(this), n);
|
||||
}
|
||||
void deallocate(value_type* p, size_t n) {
|
||||
std::allocator_traits<Allocator>::deallocate(
|
||||
*static_cast<Allocator *>(this), p, n);
|
||||
std::allocator_traits<Allocator>::deallocate(*static_cast<Allocator*>(this),
|
||||
p, n);
|
||||
}
|
||||
};
|
||||
|
||||
@ -383,7 +381,7 @@ TEST(MemoryBufferTest, AllocatorMaxSize) {
|
||||
try {
|
||||
// new_capacity = 128 + 128/2 = 192 > 160
|
||||
buffer.resize(160);
|
||||
} catch (const std::exception &) {
|
||||
} catch (const std::exception&) {
|
||||
throws_on_resize = true;
|
||||
}
|
||||
EXPECT_FALSE(throws_on_resize);
|
||||
@ -395,7 +393,7 @@ TEST(MemoryBufferTest, AllocatorMaxSizeOverflow) {
|
||||
bool throws_on_resize = false;
|
||||
try {
|
||||
buffer.resize(161);
|
||||
} catch (const std::exception &) {
|
||||
} catch (const std::exception&) {
|
||||
throws_on_resize = true;
|
||||
}
|
||||
EXPECT_TRUE(throws_on_resize);
|
||||
@ -2470,17 +2468,17 @@ TEST(FormatTest, CharTraitsIsNotAmbiguous) {
|
||||
#endif
|
||||
}
|
||||
|
||||
#if __cplusplus > 201103L
|
||||
struct custom_char {
|
||||
int value;
|
||||
custom_char() = default;
|
||||
|
||||
template <typename T> custom_char(T val) : value(static_cast<int>(val)) {}
|
||||
template <typename T>
|
||||
constexpr custom_char(T val) : value(static_cast<int>(val)) {}
|
||||
|
||||
operator int() const { return value; }
|
||||
};
|
||||
|
||||
int to_ascii(custom_char c) { return c; }
|
||||
|
||||
FMT_BEGIN_NAMESPACE
|
||||
template <> struct is_char<custom_char> : std::true_type {};
|
||||
FMT_END_NAMESPACE
|
||||
@ -2491,6 +2489,7 @@ TEST(FormatTest, FormatCustomChar) {
|
||||
EXPECT_EQ(result.size(), 1);
|
||||
EXPECT_EQ(result[0], custom_char('x'));
|
||||
}
|
||||
#endif
|
||||
|
||||
// Convert a char8_t string to std::string. Otherwise GTest will insist on
|
||||
// inserting `char8_t` NTBS into a `char` stream which is disabled by P1423.
|
||||
|
Loading…
Reference in New Issue
Block a user