BuGUI
BUtton Grid User Interface
Loading...
Searching...
No Matches
recursive.hpp
1#pragma once
2#include <boost/pfr/core.hpp>
3#include <boost/pfr/tuple_size.hpp>
4
5namespace bugui
6{
7template <auto C, typename Tp>
8concept recursive =
9 [] <typename T> (this const auto& self) consteval
10{
11 using namespace std;
12 using namespace boost;
13
14 return C.template operator()<T>()
15 || [&self] <size_t... I> (index_sequence<I...>) consteval
16 { return ((self.template operator()
17 <typename pfr::tuple_element_t<I, T>>())
18 || ...);
19 } (make_index_sequence<pfr::tuple_size_v<T>>{});
20}.template operator()<Tp>();
21
22#define TO_LAMBDA(ThisConcept) \
23[] <typename Concept> () consteval \
24{ return ThisConcept<Concept>; }
25
26#define RECURSIVE_CONCEPT(ThisConcept, Tp) \
27recursive<TO_LAMBDA(ThisConcept), Tp>
28
29} // namespace bugui
Definition recursive.hpp:8