@@ -303,42 +303,44 @@ constexpr auto numeric_risk(SrcRep value)
303303 return details::numeric_risk<DestRep>(value);
304304}
305305
306- template <numeric_underlying_type DestRep, numeric_underlying_type SrcRep>
306+ template <std_numeric DestRep, std_numeric SrcRep>
307307 requires details::statically_castable<DestRep, SrcRep>
308308constexpr auto unchecked_cast (SrcRep value) noexcept
309309 -> std::remove_cvref_t<DestRep> {
310310 return details::unchecked_rep_cast<DestRep>(value);
311311}
312312
313- template <numeric_underlying_type DestRep, numeric_underlying_type SrcRep>
313+ template <std_numeric DestRep, std_numeric SrcRep>
314314 requires details::statically_castable<DestRep, SrcRep>
315315constexpr auto checked_cast (SrcRep value)
316316 -> cast_result<std::remove_cvref_t<DestRep>> {
317317 return details::checked_rep_cast<DestRep>(value);
318318}
319319
320- template <numeric_underlying_type DestRep, numeric_underlying_type SrcRep>
320+ template <std_numeric DestRep, std_numeric SrcRep>
321321 requires details::statically_castable<DestRep, SrcRep>
322322constexpr auto saturating_cast (SrcRep value) noexcept
323323 -> std::remove_cvref_t<DestRep> {
324324 return details::saturating_rep_cast<DestRep>(value);
325325}
326326
327- template <numeric_underlying_type DestRep, numeric_underlying_type SrcRep>
327+ template <std_numeric DestRep, std_numeric SrcRep>
328328 requires details::statically_castable<DestRep, SrcRep>
329329constexpr auto truncating_cast (SrcRep value) noexcept
330330 -> std::remove_cvref_t<DestRep> {
331331 return details::truncating_rep_cast<DestRep>(value);
332332}
333333
334- template <numeric_underlying_type DestRep, numeric_underlying_type SrcRep>
334+ template <std_numeric DestRep, std_numeric SrcRep>
335335 requires details::statically_castable<DestRep, SrcRep>
336336constexpr auto exact_cast (SrcRep value)
337337 -> cast_result<std::remove_cvref_t<DestRep>> {
338338 return details::exact_rep_cast<DestRep>(value);
339339}
340340
341341template <underlying_type Dest, underlying_type Src>
342+ requires (!details::builtin_numeric_pair<std::remove_cv_t <Dest>,
343+ std::remove_cv_t <Src>>)
342344constexpr auto unchecked_cast (Src value) noexcept -> Dest {
343345 return details::cast_underlying_value<Dest>(
344346 value, []<typename DestRep, typename SrcRep>(SrcRep rep) {
@@ -347,6 +349,8 @@ constexpr auto unchecked_cast(Src value) noexcept -> Dest {
347349}
348350
349351template <underlying_type Dest, underlying_type Src>
352+ requires (!details::builtin_numeric_pair<std::remove_cv_t <Dest>,
353+ std::remove_cv_t <Src>>)
350354constexpr auto checked_cast (Src value) -> cast_result<Dest> {
351355 return details::cast_underlying_result<Dest>(
352356 value, []<typename DestRep, typename SrcRep>(SrcRep rep) {
@@ -355,6 +359,8 @@ constexpr auto checked_cast(Src value) -> cast_result<Dest> {
355359}
356360
357361template <underlying_type Dest, underlying_type Src>
362+ requires (!details::builtin_numeric_pair<std::remove_cv_t <Dest>,
363+ std::remove_cv_t <Src>>)
358364constexpr auto saturating_cast (Src value) noexcept -> Dest {
359365 return details::cast_underlying_value<Dest>(
360366 value, []<typename DestRep, typename SrcRep>(SrcRep rep) {
@@ -363,6 +369,8 @@ constexpr auto saturating_cast(Src value) noexcept -> Dest {
363369}
364370
365371template <underlying_type Dest, underlying_type Src>
372+ requires (!details::builtin_numeric_pair<std::remove_cv_t <Dest>,
373+ std::remove_cv_t <Src>>)
366374constexpr auto truncating_cast (Src value) noexcept -> Dest {
367375 return details::cast_underlying_value<Dest>(
368376 value, []<typename DestRep, typename SrcRep>(SrcRep rep) {
@@ -371,6 +379,8 @@ constexpr auto truncating_cast(Src value) noexcept -> Dest {
371379}
372380
373381template <underlying_type Dest, underlying_type Src>
382+ requires (!details::builtin_numeric_pair<std::remove_cv_t <Dest>,
383+ std::remove_cv_t <Src>>)
374384constexpr auto exact_cast (Src value) -> cast_result<Dest> {
375385 return details::cast_underlying_result<Dest>(
376386 value, []<typename DestRep, typename SrcRep>(SrcRep rep) {
0 commit comments