brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · e63b848 Raw
73 lines · c
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCPP___CHRONO_IS_CLOCK_H11#define _LIBCPP___CHRONO_IS_CLOCK_H12 13#include <__config>14 15#include <__chrono/duration.h>16#include <__chrono/time_point.h>17#include <__concepts/same_as.h>18#include <__type_traits/integral_constant.h>19#include <__type_traits/is_arithmetic.h>20#include <__type_traits/is_class.h>21#include <__type_traits/is_union.h>22#include <ratio>23 24#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)25#  pragma GCC system_header26#endif27 28#if _LIBCPP_STD_VER >= 2029 30_LIBCPP_BEGIN_NAMESPACE_STD31 32namespace chrono {33 34// Helper to check that _Tp::time_point has the form time_point<_, typename _Tp::duration>.35template <class _TimePoint, class _ClockType>36inline constexpr bool __is_valid_clock_time_point_v = false;37 38template <class _TimePointClock, class _ClockType>39inline constexpr bool40    __is_valid_clock_time_point_v<time_point<_TimePointClock, typename _ClockType::duration>, _ClockType> = true;41 42// Check if a clock satisfies the Cpp17Clock requirements as defined in [time.clock.req]43template <class _Tp>44_LIBCPP_NO_SPECIALIZATIONS inline constexpr bool is_clock_v = requires {45  typename _Tp::rep;46  requires is_arithmetic_v<typename _Tp::rep> || is_class_v<typename _Tp::rep> || is_union_v<typename _Tp::rep>;47 48  typename _Tp::period;49  requires __is_ratio_v<typename _Tp::period>;50 51  typename _Tp::duration;52  requires same_as<typename _Tp::duration, duration<typename _Tp::rep, typename _Tp::period>>;53 54  typename _Tp::time_point;55  requires __is_valid_clock_time_point_v<typename _Tp::time_point, _Tp>;56 57  _Tp::is_steady;58  requires same_as<decltype((_Tp::is_steady)), const bool&>;59 60  _Tp::now();61  requires same_as<decltype(_Tp::now()), typename _Tp::time_point>;62};63 64template <class _Tp>65struct _LIBCPP_NO_SPECIALIZATIONS is_clock : bool_constant<is_clock_v<_Tp>> {};66 67} // namespace chrono68 69_LIBCPP_END_NAMESPACE_STD70 71#endif // _LIBCPP_STD_VER72#endif // _LIBCPP___CHRONO_IS_CLOCK_H73