From 2f327fa2b8da751e8859a6d781d8458ef704bad6 Mon Sep 17 00:00:00 2001 From: Gabriel Busnot Date: Tue, 20 Jun 2023 19:09:53 +0000 Subject: [PATCH] base: define is_iterable type trait Change-Id: I38bb0ddcbb95645797f1d20724b78aff3bef4580 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/71838 Maintainer: Daniel Carvalho Tested-by: kokoro Reviewed-by: Daniel Carvalho --- src/base/type_traits.hh | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/base/type_traits.hh b/src/base/type_traits.hh index 1fec93d9d1..a42f786443 100644 --- a/src/base/type_traits.hh +++ b/src/base/type_traits.hh @@ -27,8 +27,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#ifndef __BASE_TYPETRAITS_HH__ -#define __BASE_TYPETRAITS_HH__ +#ifndef BASE_TYPETRAITS_HH +#define BASE_TYPETRAITS_HH #include #include @@ -92,6 +92,19 @@ template using MemberFunctionArgsTuple_t = typename MemberFunctionSignature::argsTuple_t; + +// iterable type trait +template +struct is_iterable: std::false_type {}; + +template +struct is_iterable())), + decltype(end(std::declval()))>>: std::true_type {}; + +template +constexpr bool is_iterable_v = is_iterable::value; + } // namespace gem5 -#endif // __BASE_TYPETRAITS_HH__ +#endif // BASE_TYPETRAITS_HH