Skip to content

Commit 5928feb

Browse files
committed
Fix 'partial specialization in unbraced export-declaration' GCC 15 errors
1 parent ed27df5 commit 5928feb

File tree

1 file changed

+24
-28
lines changed

1 file changed

+24
-28
lines changed

include/fmt/std.h

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void write_escaped_path(basic_memory_buffer<Char>& quoted,
113113

114114
} // namespace detail
115115

116-
FMT_EXPORT
116+
FMT_BEGIN_EXPORT
117117
template <typename Char> struct formatter<std::filesystem::path, Char> {
118118
private:
119119
format_specs specs_;
@@ -162,6 +162,7 @@ template <typename Char> struct formatter<std::filesystem::path, Char> {
162162
specs);
163163
}
164164
};
165+
FMT_END_EXPORT
165166

166167
class path : public std::filesystem::path {
167168
public:
@@ -181,9 +182,7 @@ class path : public std::filesystem::path {
181182
FMT_END_NAMESPACE
182183
#endif // FMT_CPP_LIB_FILESYSTEM
183184

184-
FMT_BEGIN_NAMESPACE
185-
FMT_EXPORT
186-
template <std::size_t N, typename Char>
185+
FMT_EXPORT FMT_BEGIN_NAMESPACE template <std::size_t N, typename Char>
187186
struct formatter<std::bitset<N>, Char>
188187
: nested_formatter<basic_string_view<Char>, Char> {
189188
private:
@@ -209,15 +208,12 @@ struct formatter<std::bitset<N>, Char>
209208
}
210209
};
211210

212-
FMT_EXPORT
213211
template <typename Char>
214212
struct formatter<std::thread::id, Char> : basic_ostream_formatter<Char> {};
215213
FMT_END_NAMESPACE
216214

217215
#ifdef __cpp_lib_optional
218-
FMT_BEGIN_NAMESPACE
219-
FMT_EXPORT
220-
template <typename T, typename Char>
216+
FMT_EXPORT FMT_BEGIN_NAMESPACE template <typename T, typename Char>
221217
struct formatter<std::optional<T>, Char,
222218
std::enable_if_t<is_formattable<T, Char>::value>> {
223219
private:
@@ -277,14 +273,13 @@ FMT_END_NAMESPACE
277273
#endif
278274

279275
#ifdef __cpp_lib_expected
280-
FMT_BEGIN_NAMESPACE
276+
FMT_EXPORT FMT_BEGIN_NAMESPACE
281277

282-
FMT_EXPORT
283-
template <typename T, typename E, typename Char>
284-
struct formatter<std::expected<T, E>, Char,
285-
std::enable_if_t<(std::is_void<T>::value ||
286-
is_formattable<T, Char>::value) &&
287-
is_formattable<E, Char>::value>> {
278+
template <typename T, typename E, typename Char>
279+
struct formatter<std::expected<T, E>, Char,
280+
std::enable_if_t<(std::is_void<T>::value ||
281+
is_formattable<T, Char>::value) &&
282+
is_formattable<E, Char>::value>> {
288283
FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) -> const Char* {
289284
return ctx.begin();
290285
}
@@ -310,9 +305,8 @@ FMT_END_NAMESPACE
310305
#endif // __cpp_lib_expected
311306

312307
#ifdef __cpp_lib_source_location
313-
FMT_BEGIN_NAMESPACE
314-
FMT_EXPORT
315-
template <> struct formatter<std::source_location> {
308+
FMT_EXPORT FMT_BEGIN_NAMESPACE template <>
309+
struct formatter<std::source_location> {
316310
FMT_CONSTEXPR auto parse(parse_context<>& ctx) { return ctx.begin(); }
317311

318312
template <typename FormatContext>
@@ -367,7 +361,7 @@ template <typename T, typename C> struct is_variant_formattable {
367361
detail::is_variant_formattable_<T, C>::value;
368362
};
369363

370-
FMT_EXPORT
364+
FMT_BEGIN_EXPORT
371365
template <typename Char> struct formatter<std::monostate, Char> {
372366
FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) -> const Char* {
373367
return ctx.begin();
@@ -380,7 +374,6 @@ template <typename Char> struct formatter<std::monostate, Char> {
380374
}
381375
};
382376

383-
FMT_EXPORT
384377
template <typename Variant, typename Char>
385378
struct formatter<
386379
Variant, Char,
@@ -410,11 +403,12 @@ struct formatter<
410403
return out;
411404
}
412405
};
406+
FMT_END_EXPORT
413407
FMT_END_NAMESPACE
414408
#endif // FMT_CPP_LIB_VARIANT
415409

416410
FMT_BEGIN_NAMESPACE
417-
FMT_EXPORT
411+
FMT_BEGIN_EXPORT
418412
template <> struct formatter<std::error_code> {
419413
private:
420414
format_specs specs_;
@@ -448,6 +442,7 @@ template <> struct formatter<std::error_code> {
448442
specs);
449443
}
450444
};
445+
FMT_END_EXPORT
451446

452447
#if FMT_USE_RTTI
453448
namespace detail {
@@ -520,7 +515,7 @@ auto write_demangled_name(OutputIt out, const std::type_info& ti) -> OutputIt {
520515

521516
} // namespace detail
522517

523-
FMT_EXPORT
518+
FMT_BEGIN_EXPORT
524519
template <typename Char>
525520
struct formatter<std::type_info, Char // DEPRECATED! Mixing code unit types.
526521
> {
@@ -537,7 +532,6 @@ struct formatter<std::type_info, Char // DEPRECATED! Mixing code unit types.
537532
};
538533
#endif
539534

540-
FMT_EXPORT
541535
template <typename T, typename Char>
542536
struct formatter<
543537
T, Char, // DEPRECATED! Mixing code unit types.
@@ -571,6 +565,7 @@ struct formatter<
571565
return detail::write_bytes<Char>(out, string_view(ex.what()));
572566
}
573567
};
568+
FMT_END_EXPORT
574569

575570
namespace detail {
576571

@@ -603,7 +598,7 @@ struct is_bit_reference_like<std::__bit_const_reference<C>> {
603598
// We can't use std::vector<bool, Allocator>::reference and
604599
// std::bitset<N>::reference because the compiler can't deduce Allocator and N
605600
// in partial specialization.
606-
FMT_EXPORT
601+
FMT_BEGIN_EXPORT
607602
template <typename BitRef, typename Char>
608603
struct formatter<BitRef, Char,
609604
enable_if_t<detail::is_bit_reference_like<BitRef>::value>>
@@ -623,7 +618,6 @@ template <typename T> auto ptr(const std::shared_ptr<T>& p) -> const void* {
623618
return p.get();
624619
}
625620

626-
FMT_EXPORT
627621
template <typename T, typename Char>
628622
struct formatter<std::atomic<T>, Char,
629623
enable_if_t<is_formattable<T, Char>::value>>
@@ -634,9 +628,10 @@ struct formatter<std::atomic<T>, Char,
634628
return formatter<T, Char>::format(v.load(), ctx);
635629
}
636630
};
631+
FMT_END_EXPORT
637632

638633
#ifdef __cpp_lib_atomic_flag_test
639-
FMT_EXPORT
634+
FMT_BEGIN_EXPORT
640635
template <typename Char>
641636
struct formatter<std::atomic_flag, Char> : formatter<bool, Char> {
642637
template <typename FormatContext>
@@ -645,9 +640,10 @@ struct formatter<std::atomic_flag, Char> : formatter<bool, Char> {
645640
return formatter<bool, Char>::format(v.test(), ctx);
646641
}
647642
};
643+
FMT_END_EXPORT
648644
#endif // __cpp_lib_atomic_flag_test
649645

650-
FMT_EXPORT
646+
FMT_BEGIN_EXPORT
651647
template <typename T, typename Char> struct formatter<std::complex<T>, Char> {
652648
private:
653649
detail::dynamic_format_specs<Char> specs_;
@@ -710,7 +706,6 @@ template <typename T, typename Char> struct formatter<std::complex<T>, Char> {
710706
}
711707
};
712708

713-
FMT_EXPORT
714709
template <typename T, typename Char>
715710
struct formatter<std::reference_wrapper<T>, Char,
716711
enable_if_t<is_formattable<remove_cvref_t<T>, Char>::value>>
@@ -721,6 +716,7 @@ struct formatter<std::reference_wrapper<T>, Char,
721716
return formatter<remove_cvref_t<T>, Char>::format(ref.get(), ctx);
722717
}
723718
};
719+
FMT_END_EXPORT
724720

725721
FMT_END_NAMESPACE
726722
#endif // FMT_STD_H_

0 commit comments

Comments
 (0)