Skip to content

Commit 50aafa3

Browse files
committed
Re-architect for old compilers
1 parent 289bd2e commit 50aafa3

File tree

7 files changed

+37
-28
lines changed

7 files changed

+37
-28
lines changed

include/boost/decimal/charconv.hpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,10 +1109,14 @@ constexpr auto to_chars_hex_impl(char* first, char* last, const TargetDecimalTyp
11091109
return to_chars_integer_impl<std::uint32_t>(first, last, static_cast<std::uint32_t>(abs_exp));
11101110
}
11111111

1112-
template <typename TargetDecimalType>
1113-
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept
1114-
BOOST_DECIMAL_REQUIRES_RETURN(is_ieee_type_v, TargetDecimalType, to_chars_result)
1112+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
1113+
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result
11151114
{
1115+
BOOST_DECIMAL_IF_CONSTEXPR (detail::is_fast_type_v<TargetDecimalType>)
1116+
{
1117+
return {last, std::errc::invalid_argument};
1118+
}
1119+
11161120
using unsigned_integer = typename TargetDecimalType::significand_type;
11171121

11181122
const auto fp = fpclassify(value);
@@ -1171,13 +1175,6 @@ constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, co
11711175
return to_chars_integer_impl<std::uint32_t>(first, last, abs_exp);
11721176
}
11731177

1174-
template <typename TargetDecimalType>
1175-
constexpr auto to_chars_cohort_preserving_scientific(char*, char* last, const TargetDecimalType&) noexcept
1176-
BOOST_DECIMAL_REQUIRES_RETURN(!is_ieee_type_v, TargetDecimalType, to_chars_result)
1177-
{
1178-
return {last, std::errc::invalid_argument};
1179-
}
1180-
11811178
#ifdef _MSC_VER
11821179
# pragma warning(push)
11831180
# pragma warning(disable: 4702) // Unreachable code

include/boost/decimal/decimal128_t.hpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,8 @@ constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalT
9898
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
9999
constexpr auto to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
100100

101-
template <typename TargetDecimalType>
102-
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept
103-
BOOST_DECIMAL_REQUIRES_RETURN(is_ieee_type_v, TargetDecimalType, to_chars_result);
101+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
102+
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
104103

105104
} //namespace detail
106105

@@ -209,9 +208,8 @@ BOOST_DECIMAL_EXPORT class decimal128_t final
209208
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
210209
friend constexpr auto detail::to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
211210

212-
template <typename TargetDecimalType>
213-
friend constexpr auto detail::to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept
214-
BOOST_DECIMAL_REQUIRES_RETURN(detail::is_ieee_type_v, TargetDecimalType, to_chars_result);
211+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
212+
friend constexpr auto detail::to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
215213

216214
#if !defined(BOOST_DECIMAL_DISABLE_CLIB)
217215
constexpr decimal128_t(const char* str, std::size_t len);

include/boost/decimal/decimal32_t.hpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,8 @@ constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalT
102102
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
103103
constexpr auto to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
104104

105-
template <typename TargetDecimalType>
106-
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept
107-
BOOST_DECIMAL_REQUIRES_RETURN(is_ieee_type_v, TargetDecimalType, to_chars_result);
105+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
106+
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
108107

109108
template <bool checked, BOOST_DECIMAL_DECIMAL_FLOATING_TYPE T>
110109
constexpr auto d32_fma_impl(T x, T y, T z) noexcept -> T;
@@ -219,9 +218,8 @@ BOOST_DECIMAL_EXPORT class decimal32_t final // NOLINT(cppcoreguidelines-special
219218
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
220219
friend constexpr auto detail::to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
221220

222-
template <typename TargetDecimalType>
223-
friend constexpr auto detail::to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept
224-
BOOST_DECIMAL_REQUIRES_RETURN(detail::is_ieee_type_v, TargetDecimalType, to_chars_result);
221+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
222+
friend constexpr auto detail::to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
225223

226224
#if !defined(BOOST_DECIMAL_DISABLE_CLIB)
227225
constexpr decimal32_t(const char* str, std::size_t len);

include/boost/decimal/decimal64_t.hpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,8 @@ constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalT
101101
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
102102
constexpr auto to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
103103

104-
template <typename TargetDecimalType>
105-
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept
106-
BOOST_DECIMAL_REQUIRES_RETURN(is_ieee_type_v, TargetDecimalType, to_chars_result);
104+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
105+
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
107106

108107
template <bool checked, BOOST_DECIMAL_DECIMAL_FLOATING_TYPE T>
109108
constexpr auto d64_fma_impl(T x, T y, T z) noexcept -> T;
@@ -224,9 +223,8 @@ BOOST_DECIMAL_EXPORT class decimal64_t final
224223
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
225224
friend constexpr auto detail::to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
226225

227-
template <typename TargetDecimalType>
228-
friend constexpr auto detail::to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept
229-
BOOST_DECIMAL_REQUIRES_RETURN(detail::is_ieee_type_v, TargetDecimalType, to_chars_result);
226+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
227+
friend constexpr auto detail::to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
230228

231229
template <bool checked, BOOST_DECIMAL_DECIMAL_FLOATING_TYPE T>
232230
friend constexpr auto detail::d64_fma_impl(T x, T y, T z) noexcept -> T;

include/boost/decimal/decimal_fast128_t.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalT
7070
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
7171
constexpr auto to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
7272

73+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
74+
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
75+
7376
} // namespace detail
7477

7578
#ifdef _MSC_VER
@@ -185,6 +188,9 @@ BOOST_DECIMAL_EXPORT class decimal_fast128_t final
185188
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
186189
friend constexpr auto detail::to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
187190

191+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
192+
friend constexpr auto detail::to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
193+
188194
#if !defined(BOOST_DECIMAL_DISABLE_CLIB)
189195
constexpr decimal_fast128_t(const char* str, std::size_t len);
190196
#endif

include/boost/decimal/decimal_fast32_t.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalT
6565
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
6666
constexpr auto to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
6767

68+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
69+
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
70+
6871
template <bool checked, BOOST_DECIMAL_DECIMAL_FLOATING_TYPE T>
6972
constexpr auto d32_fma_impl(T x, T y, T z) noexcept -> T;
7073

@@ -182,6 +185,9 @@ BOOST_DECIMAL_EXPORT class decimal_fast32_t final
182185
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
183186
friend constexpr auto detail::to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
184187

188+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
189+
friend constexpr auto detail::to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
190+
185191
template <typename DecimalType, typename T>
186192
friend constexpr auto detail::generic_div_impl(const T& lhs, const T& rhs) noexcept -> DecimalType;
187193

include/boost/decimal/decimal_fast64_t.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalT
6767
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
6868
constexpr auto to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
6969

70+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
71+
constexpr auto to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
72+
7073
template <bool checked, BOOST_DECIMAL_DECIMAL_FLOATING_TYPE T>
7174
constexpr auto d64_fma_impl(T x, T y, T z) noexcept -> T;
7275

@@ -189,6 +192,9 @@ BOOST_DECIMAL_EXPORT class decimal_fast64_t final
189192
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
190193
friend constexpr auto detail::to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
191194

195+
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
196+
friend constexpr auto detail::to_chars_cohort_preserving_scientific(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
197+
192198
template <bool checked, BOOST_DECIMAL_DECIMAL_FLOATING_TYPE T>
193199
friend constexpr auto detail::d64_fma_impl(T x, T y, T z) noexcept -> T;
194200

0 commit comments

Comments
 (0)