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

[edit] See also