std::chrono::ceil(std::chrono::duration) - cppreference.com (original) (raw)
| | | | | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------- | | template< class ToDuration, class Rep, class Period > constexpr ToDuration ceil( const std::chrono::duration<Rep, Period>& d ); | | (since C++17) |
Returns the smallest duration t representable in ToDuration that is greater or equal to d.
The function does not participate in the overload resolution unless ToDuration is a specialization of std::chrono::duration.
[edit] Parameters
[edit] Return value
d rounded up to a duration of type ToDuration.
[edit] Possible implementation
namespace detail { template inline constexpr bool is_duration_v = false; template<class Rep, class Period> inline constexpr bool is_duration_v< std::chrono::duration<Rep, Period>> = true; } template<class To, class Rep, class Period, class = std::enable_if_t<detail::is_duration_v>> constexpr To ceil(const std::chrono::duration<Rep, Period>& d) { To t = std::chrono::duration_cast(d); if (t < d) return t + To{1}; return t; }
[edit] Example
#include #include int main() { using namespace std::chrono_literals; using Min = std::chrono::minutes; std::cout << std::showpos << "ceil(+2.4min) = " << std::chrono::ceil(+2.4min).count() << "min\n" << "ceil(-2.4min) = " << std::chrono::ceil(-2.4min).count() << "min\n" << "ceil(+0.0min) = " << std::chrono::ceil(+0.0min).count() << "min\n"; }
Output:
ceil(+2.4min) = +3min ceil(-2.4min) = -2min ceil(+0.0min) = +0min