#pragma once #ifndef __FILE_Detail_CP_MaxMin_Hpp #define __FILE_Detail_CP_MaxMin_Hpp namespace Internal { template struct MaxMinFoucsValueConditionalTool { constexpr static bool ABS = (!!sizeof(A) > sizeof(B)); using AF = std::conditional_t, std::conditional_t < ABS, A, B>, A >; using BF = std::conditional_t, B, std::conditional_t < ABS, A, B> >; using Type = std::conditional_t < std::is_floating_point_v, AF, BF>; }; } template using MaxMinFoucsValueConditional = typename Internal::MaxMinFoucsValueConditionalTool::Type; template auto Max(const First& first, const Second& second) { return std::max>(first, second); } template auto Max(const First& first, const Second& second, const Args&... args) { return Max(std::max>(first, second), args...); }; template auto Min(const First& first, const Second& second) { return std::min>(first, second); } template auto MIn(const First& first, const Second& second, const Args&... args) { return Min(std::min>(first, second), args...); }; #endif // !__FILE_Detail_CP_MaxMin_Hpp