Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions stl/inc/__msvc_inttypes.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,19 @@ typedef _Lldiv_t imaxdiv_t;
#define _CONSTEXPR_CINTTYPES23 inline
#endif // ^^^ inline when /Zc:cmath- opts out of constexpr, and in C++20 and earlier ^^^

[[nodiscard]] _Check_return_ _CONSTEXPR_CINTTYPES23 intmax_t __cdecl imaxabs(_In_ intmax_t _Number) noexcept
/* strengthened */ {
return _Number >= 0 ? _Number : -_Number;
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CINTTYPES23 imaxdiv_t __cdecl imaxdiv(
_In_ intmax_t _Numerator, _In_ intmax_t _Denominator) noexcept /* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}
extern "C++" {
inline namespace _Msvc_inttypes {
Comment thread
StephanTLavavej marked this conversation as resolved.
[[nodiscard]] _Check_return_ _CONSTEXPR_CINTTYPES23 intmax_t __cdecl imaxabs(_In_ intmax_t _Number) noexcept
/* strengthened */ {
return _Number >= 0 ? _Number : -_Number;
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CINTTYPES23 imaxdiv_t __cdecl imaxdiv(
_In_ intmax_t _Numerator, _In_ intmax_t _Denominator) noexcept /* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}
} // namespace _Msvc_inttypes
} // extern "C++"

#undef _CONSTEXPR_CINTTYPES23

Expand Down
107 changes: 50 additions & 57 deletions stl/inc/__msvc_stdlib.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,46 +222,37 @@ typedef struct _lldiv_t {
#define _CONSTEXPR_CSTDLIB23 inline
#endif // ^^^ inline when /Zc:cmath- opts out of constexpr, and in C++20 and earlier ^^^

_Check_return_ _CONSTEXPR_CSTDLIB23 int __cdecl abs(_In_ int) noexcept;
_Check_return_ _CONSTEXPR_CSTDLIB23 long __cdecl labs(_In_ long) noexcept;
_Check_return_ _CONSTEXPR_CSTDLIB23 long long __cdecl llabs(_In_ long long) noexcept;
_Check_return_ _CONSTEXPR_CSTDLIB23 div_t __cdecl div(_In_ int, _In_ int) noexcept;
_Check_return_ _CONSTEXPR_CSTDLIB23 ldiv_t __cdecl ldiv(_In_ long, _In_ long) noexcept;
_Check_return_ _CONSTEXPR_CSTDLIB23 lldiv_t __cdecl lldiv(_In_ long long, _In_ long long) noexcept;

#pragma warning(push)
#pragma warning(disable : 4163) // 'meow' not available as an intrinsic function
#pragma function(abs, labs, llabs)
#pragma function(div, ldiv, lldiv)
#pragma warning(pop)

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 int __cdecl abs(_In_ int _Xx) noexcept /* strengthened */ {
return _Xx >= 0 ? _Xx : -_Xx;
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 long __cdecl labs(_In_ long _Xx) noexcept /* strengthened */ {
return _Xx >= 0 ? _Xx : -_Xx;
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 long long __cdecl llabs(_In_ long long _Xx) noexcept
/* strengthened */ {
return _Xx >= 0 ? _Xx : -_Xx;
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 div_t __cdecl div(_In_ int _Numerator, _In_ int _Denominator) noexcept
/* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 ldiv_t __cdecl ldiv(
_In_ long _Numerator, _In_ long _Denominator) noexcept /* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 lldiv_t __cdecl lldiv(
_In_ long long _Numerator, _In_ long long _Denominator) noexcept /* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}
extern "C++" {
inline namespace _Msvc_stdlib {
Comment thread
StephanTLavavej marked this conversation as resolved.
[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 int __cdecl abs(_In_ int _Xx) noexcept /* strengthened */ {
return _Xx >= 0 ? _Xx : -_Xx;
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 long __cdecl labs(_In_ long _Xx) noexcept /* strengthened */ {
return _Xx >= 0 ? _Xx : -_Xx;
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 long long __cdecl llabs(_In_ long long _Xx) noexcept
/* strengthened */ {
return _Xx >= 0 ? _Xx : -_Xx;
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 div_t __cdecl div(
_In_ int _Numerator, _In_ int _Denominator) noexcept /* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 ldiv_t __cdecl ldiv(
_In_ long _Numerator, _In_ long _Denominator) noexcept /* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}

[[nodiscard]] _Check_return_ _CONSTEXPR_CSTDLIB23 lldiv_t __cdecl lldiv(
_In_ long long _Numerator, _In_ long long _Denominator) noexcept /* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}
} // namespace _Msvc_stdlib
} // extern "C++"

_Check_return_ __int64 __cdecl _abs64(_In_ __int64 _Number);

Expand Down Expand Up @@ -302,23 +293,25 @@ _ACRTIMP errno_t __cdecl rand_s(_Out_ unsigned int* _RandomValue);


extern "C++" {
[[nodiscard]] _CONSTEXPR_CSTDLIB23 long abs(long const _Xx) noexcept /* strengthened */ {
return labs(_Xx);
}

[[nodiscard]] _CONSTEXPR_CSTDLIB23 long long abs(long long const _Xx) noexcept /* strengthened */ {
return llabs(_Xx);
}

[[nodiscard]] _CONSTEXPR_CSTDLIB23 ldiv_t div(long const _Numerator, long const _Denominator) noexcept
/* strengthened */ {
return ldiv(_Numerator, _Denominator);
}

[[nodiscard]] _CONSTEXPR_CSTDLIB23 lldiv_t div(long long const _Numerator, long long const _Denominator) noexcept
/* strengthened */ {
return lldiv(_Numerator, _Denominator);
}
inline namespace _Msvc_stdlib {
[[nodiscard]] _CONSTEXPR_CSTDLIB23 long abs(long const _Xx) noexcept /* strengthened */ {
return _Xx >= 0 ? _Xx : -_Xx;
}

[[nodiscard]] _CONSTEXPR_CSTDLIB23 long long abs(long long const _Xx) noexcept /* strengthened */ {
return _Xx >= 0 ? _Xx : -_Xx;
}

[[nodiscard]] _CONSTEXPR_CSTDLIB23 ldiv_t div(long const _Numerator, long const _Denominator) noexcept
/* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}

[[nodiscard]] _CONSTEXPR_CSTDLIB23 lldiv_t div(long long const _Numerator, long long const _Denominator) noexcept
/* strengthened */ {
return {_Numerator / _Denominator, _Numerator % _Denominator};
}
} // namespace _Msvc_stdlib
} // extern "C++"

#undef _CONSTEXPR_CSTDLIB23
Expand Down