Move a couple of useful concepts from benchmark.hpp to traits.hpp. Pu… · alessandro90/cpputils@64cb29c · GitHub
Skip to content

Commit 64cb29c

Browse files
committed
Move a couple of useful concepts from benchmark.hpp to traits.hpp. Pull out concept optional_like of namespace detail
1 parent 6ebd1bf commit 64cb29c

3 files changed

Lines changed: 38 additions & 37 deletions

File tree

‎src/include/cpputils/functional/opt_ext.hpp‎

Lines changed: 15 additions & 15 deletions

‎src/include/cpputils/meta/traits.hpp‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef CPPUTILS_TRAITS_HPP
22
#define CPPUTILS_TRAITS_HPP
33

4+
#include <chrono>
45
#include <concepts>
56
#include <type_traits>
67

@@ -60,7 +61,27 @@ namespace tl {
6061
typename T::type;
6162
};
6263
} // namespace tl
63-
} // namespace cpputils
6464

65+
template <typename>
66+
struct is_duration : std::false_type {};
67+
68+
template <typename Rep, typename Period>
69+
struct is_duration<std::chrono::duration<Rep, Period>> : std::true_type {};
70+
71+
template <typename D>
72+
inline constexpr auto is_duration_v = is_duration<D>::value;
73+
74+
template <typename D>
75+
concept duration = is_duration_v<D>;
76+
77+
template <typename T>
78+
concept pair_like =
79+
requires (T t) {
80+
t.first;
81+
t.second;
82+
}
83+
&& std::is_member_object_pointer_v<std::remove_cvref_t<decltype(&std::remove_cvref_t<T>::first)>>
84+
&& std::is_member_object_pointer_v<std::remove_cvref_t<decltype(&std::remove_cvref_t<T>::second)>>;
85+
} // namespace cpputils
6586

6687
#endif

‎src/include/cpputils/misc/benchmark.hpp‎

Lines changed: 1 addition & 21 deletions

0 commit comments

Comments
 (0)