История изменений
Исправление fsb4000, (текущая версия) :
Имя _MSVC_LIFETIMEBOUND
потому что я копирнул его из сорцов MSVC STL. В своём коде не нужно именовать макросы и другие объекты начинающиеся с _
.
Там он используется для части функций, чтобы компилятор выдавал ошибки на неправильное использование известных функций, типа min
, max
, minmax
, clamp
и т.д.
Вот как выглядит определение функции std::max
:
_EXPORT_STD template <class _Ty, class _Pr>
_NODISCARD constexpr const _Ty&(max) (const _Ty& _Left _MSVC_LIFETIMEBOUND, const _Ty& _Right _MSVC_LIFETIMEBOUND,
_Pr _Pred) noexcept(noexcept(_Pred(_Left, _Right))) /* strengthened */ {
// return larger of _Left and _Right
return _Pred(_Left, _Right) ? _Right : _Left;
}
_EXPORT_STD template <class _Ty>
_NODISCARD _Post_equal_to_(_Left < _Right ? _Right : _Left) constexpr const _Ty& //
(max) (const _Ty& _Left _MSVC_LIFETIMEBOUND, const _Ty& _Right _MSVC_LIFETIMEBOUND)
noexcept(noexcept(_Left < _Right)) /* strengthened */ {
// return larger of _Left and _Right
return _Left < _Right ? _Right : _Left;
}
Исходная версия fsb4000, :
Имя _MSVC_LIFETIMEBOUND
потому что я копирнул его из сорцов MSVC STL. В своём коде не нужно именовать макросы и другие объекты начинающиеся с _
.
Там он используется для части функций, чтобы компилятор выдавал ошибки на неправильное использование известных функций, типа min
, max
, minmax
, clamp
и т.д.
Вот как выглядит определение функции std::max
:
_EXPORT_STD template <class _Ty, class _Pr>
_NODISCARD constexpr const _Ty&(max) (const _Ty& _Left _MSVC_LIFETIMEBOUND, const _Ty& _Right _MSVC_LIFETIMEBOUND,
_Pr _Pred) noexcept(noexcept(_Pred(_Left, _Right))) /* strengthened */ {
// return larger of _Left and _Right
return _Pred(_Left, _Right) ? _Right : _Left;
}