LINUX.ORG.RU

История изменений

Исправление 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;
}