@@ -1835,6 +1835,7 @@ class fixed_buffer_traits {
1835
1835
1836
1836
public:
1837
1837
constexpr explicit fixed_buffer_traits (size_t limit) : limit_(limit) {}
1838
+ FMT_CONSTEXPR20 ~fixed_buffer_traits (){};
1838
1839
constexpr auto count () const -> size_t { return count_; }
1839
1840
FMT_CONSTEXPR auto limit (size_t size) -> size_t {
1840
1841
size_t n = limit_ > count_ ? limit_ - count_ : 0 ;
@@ -1855,7 +1856,7 @@ class iterator_buffer : public Traits, public buffer<T> {
1855
1856
if (buf.size () == buffer_size) static_cast <iterator_buffer&>(buf).flush ();
1856
1857
}
1857
1858
1858
- void flush () {
1859
+ FMT_CONSTEXPR void flush () {
1859
1860
auto size = this ->size ();
1860
1861
this ->clear ();
1861
1862
const T* begin = data_;
@@ -1864,9 +1865,9 @@ class iterator_buffer : public Traits, public buffer<T> {
1864
1865
}
1865
1866
1866
1867
public:
1867
- explicit iterator_buffer (OutputIt out, size_t n = buffer_size)
1868
+ FMT_CONSTEXPR explicit iterator_buffer (OutputIt out, size_t n = buffer_size)
1868
1869
: Traits(n), buffer<T>(grow, data_, 0 , buffer_size), out_(out) {}
1869
- iterator_buffer (iterator_buffer&& other) noexcept
1870
+ FMT_CONSTEXPR iterator_buffer (iterator_buffer&& other) noexcept
1870
1871
: Traits(other),
1871
1872
buffer<T>(grow, data_, 0 , buffer_size),
1872
1873
out_(other.out_) {}
@@ -1876,11 +1877,13 @@ class iterator_buffer : public Traits, public buffer<T> {
1876
1877
FMT_CATCH (...) {}
1877
1878
}
1878
1879
1879
- auto out () -> OutputIt {
1880
+ FMT_CONSTEXPR auto out () -> OutputIt {
1880
1881
flush ();
1881
1882
return out_;
1882
1883
}
1883
- auto count () const -> size_t { return Traits::count () + this ->size (); }
1884
+ FMT_CONSTEXPR auto count () const -> size_t {
1885
+ return Traits::count () + this ->size ();
1886
+ }
1884
1887
};
1885
1888
1886
1889
template <typename T>
@@ -1896,7 +1899,7 @@ class iterator_buffer<T*, T, fixed_buffer_traits> : public fixed_buffer_traits,
1896
1899
static_cast <iterator_buffer&>(buf).flush ();
1897
1900
}
1898
1901
1899
- void flush () {
1902
+ FMT_CONSTEXPR void flush () {
1900
1903
size_t n = this ->limit (this ->size ());
1901
1904
if (this ->data () == out_) {
1902
1905
out_ += n;
@@ -1906,9 +1909,9 @@ class iterator_buffer<T*, T, fixed_buffer_traits> : public fixed_buffer_traits,
1906
1909
}
1907
1910
1908
1911
public:
1909
- explicit iterator_buffer (T* out, size_t n = buffer_size)
1912
+ FMT_CONSTEXPR explicit iterator_buffer (T* out, size_t n = buffer_size)
1910
1913
: fixed_buffer_traits(n), buffer<T>(grow, out, 0 , n), out_(out) {}
1911
- iterator_buffer (iterator_buffer&& other) noexcept
1914
+ FMT_CONSTEXPR iterator_buffer (iterator_buffer&& other) noexcept
1912
1915
: fixed_buffer_traits(other),
1913
1916
buffer<T>(static_cast <iterator_buffer&&>(other)),
1914
1917
out_(other.out_) {
@@ -1917,13 +1920,13 @@ class iterator_buffer<T*, T, fixed_buffer_traits> : public fixed_buffer_traits,
1917
1920
this ->clear ();
1918
1921
}
1919
1922
}
1920
- ~iterator_buffer () { flush (); }
1923
+ FMT_CONSTEXPR20 ~iterator_buffer () { flush (); }
1921
1924
1922
- auto out () -> T* {
1925
+ FMT_CONSTEXPR auto out () -> T* {
1923
1926
flush ();
1924
1927
return out_;
1925
1928
}
1926
- auto count () const -> size_t {
1929
+ FMT_CONSTEXPR auto count () const -> size_t {
1927
1930
return fixed_buffer_traits::count () + this ->size ();
1928
1931
}
1929
1932
};
@@ -2077,7 +2080,9 @@ template <typename T, typename Char> struct type_is_unformattable_for;
2077
2080
template <typename Char> struct string_value {
2078
2081
const Char* data;
2079
2082
size_t size;
2080
- auto str () const -> basic_string_view<Char> { return {data, size}; }
2083
+ FMT_CONSTEXPR auto str () const -> basic_string_view<Char> {
2084
+ return {data, size};
2085
+ }
2081
2086
};
2082
2087
2083
2088
template <typename Context> struct custom_value {
@@ -2392,8 +2397,8 @@ FMT_CONSTEXPR inline auto is_locking() -> bool {
2392
2397
return locking<T1>::value || is_locking<T2, Tail...>();
2393
2398
}
2394
2399
2395
- FMT_API void vformat_to (buffer<char >& buf, string_view fmt, format_args args ,
2396
- locale_ref loc = {});
2400
+ FMT_API FMT_CONSTEXPR void vformat_to (buffer<char >& buf, string_view fmt,
2401
+ format_args args, locale_ref loc = {});
2397
2402
2398
2403
#if FMT_WIN32
2399
2404
FMT_API void vprint_mojibake (FILE*, string_view, format_args, bool );
@@ -2803,7 +2808,7 @@ inline auto arg(const Char* name, const T& arg) -> detail::named_arg<Char, T> {
2803
2808
template <typename OutputIt,
2804
2809
FMT_ENABLE_IF (detail::is_output_iterator<remove_cvref_t <OutputIt>,
2805
2810
char >::value)>
2806
- auto vformat_to(OutputIt&& out, string_view fmt, format_args args)
2811
+ FMT_CONSTEXPR auto vformat_to(OutputIt&& out, string_view fmt, format_args args)
2807
2812
-> remove_cvref_t<OutputIt> {
2808
2813
auto && buf = detail::get_buffer<char >(out);
2809
2814
detail::vformat_to (buf, fmt, args, {});
@@ -2837,7 +2842,8 @@ template <typename OutputIt> struct format_to_n_result {
2837
2842
2838
2843
template <typename OutputIt, typename ... T,
2839
2844
FMT_ENABLE_IF (detail::is_output_iterator<OutputIt, char >::value)>
2840
- auto vformat_to_n(OutputIt out, size_t n, string_view fmt, format_args args)
2845
+ FMT_CONSTEXPR auto vformat_to_n(OutputIt out, size_t n, string_view fmt,
2846
+ format_args args)
2841
2847
-> format_to_n_result<OutputIt> {
2842
2848
using traits = detail::fixed_buffer_traits;
2843
2849
auto buf = detail::iterator_buffer<OutputIt, char , traits>(out, n);
@@ -2853,8 +2859,9 @@ auto vformat_to_n(OutputIt out, size_t n, string_view fmt, format_args args)
2853
2859
*/
2854
2860
template <typename OutputIt, typename ... T,
2855
2861
FMT_ENABLE_IF (detail::is_output_iterator<OutputIt, char >::value)>
2856
- FMT_INLINE auto format_to_n(OutputIt out, size_t n, format_string<T...> fmt,
2857
- T&&... args) -> format_to_n_result<OutputIt> {
2862
+ FMT_CONSTEXPR FMT_INLINE auto format_to_n(OutputIt out, size_t n,
2863
+ format_string<T...> fmt, T&&... args)
2864
+ -> format_to_n_result<OutputIt> {
2858
2865
return vformat_to_n (out, n, fmt.str , vargs<T...>{{args...}});
2859
2866
}
2860
2867
@@ -2872,7 +2879,7 @@ struct format_to_result {
2872
2879
};
2873
2880
2874
2881
template <size_t N>
2875
- auto vformat_to (char (&out)[N], string_view fmt, format_args args)
2882
+ FMT_CONSTEXPR auto vformat_to (char (&out)[N], string_view fmt, format_args args)
2876
2883
-> format_to_result {
2877
2884
auto result = vformat_to_n (out, N, fmt, args);
2878
2885
return {result.out , result.size > N};
0 commit comments