Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
func_traits.hpp
Go to the documentation of this file.
1#pragma once
2#include "../msgpack.hpp"
3#include <tuple>
4#include <type_traits>
5
6// Base template for function traits
7template <typename Func> struct func_traits;
8
9// Common implementation for all function types
10template <typename R, typename... Vs> struct func_traits_base {
13 R ret;
15
16 template <typename Func, typename Tuple> static R apply(Func&& f, Tuple&& t)
17 {
18 return std::apply([&f](auto&&... args) { return f(std::forward<Vs>(std::forward<decltype(args)>(args))...); },
20 }
21};
22
23// Specializations inherit from common base
24template <typename R, typename... Vs> struct func_traits<R (*)(Vs...)> : func_traits_base<R, Vs...> {};
25
26template <typename R, typename... Vs> struct func_traits<R (&)(Vs...)> : func_traits_base<R, Vs...> {};
27
28template <typename R, typename T, typename... Vs>
29struct func_traits<R (T::*)(Vs...) const> : func_traits_base<R, Vs...> {};
30
31// Simplified trait getter
32template <typename T> constexpr auto get_func_traits()
33{
34 if constexpr (requires { &T::operator(); }) {
35 return func_traits<decltype(&T::operator())> {};
36 } else {
37 return func_traits<T>{};
38 }
39}
constexpr auto get_func_traits()
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
MSGPACK_FIELDS(args, ret)
static R apply(Func &&f, Tuple &&t)
std::tuple< typename std::decay< Vs >::type... > Args