SpECTRE Documentation Coverage Report
Current view: top level - Utilities/TypeTraits - FunctionInfo.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 50.0 % 2 1
Test Date: 2026-10-22 17:29:42
Legend: Lines:     hit not hit

            Line data    Source code
       1            0 : // Distributed under the MIT License.
       2              : // See LICENSE.txt for details.
       3              : 
       4              : #pragma once
       5              : 
       6              : #include "Utilities/TMPL.hpp"
       7              : 
       8              : namespace tt {
       9              : /// \cond
      10              : namespace detail {
      11              : template <typename T>
      12              : struct function_info_impl;
      13              : 
      14              : template <typename Ret, typename... Args>
      15              : struct function_info_impl<Ret(Args...)> {
      16              :   using return_type = Ret;
      17              :   using argument_types = tmpl::list<Args...>;
      18              :   using class_type = void;
      19              : };
      20              : 
      21              : template <typename Ret, typename... Args>
      22              : struct function_info_impl<Ret(Args...) noexcept> {
      23              :   using return_type = Ret;
      24              :   using argument_types = tmpl::list<Args...>;
      25              :   using class_type = void;
      26              : };
      27              : 
      28              : #define FUNCTION_INFO_IMPL_FUNCTION_PTR(MODIFIERS, NOEXCEPT_STATUS)        \
      29              :   template <typename Ret,                                                  \
      30              :             typename... Args> /* NOLINTNEXTLINE(misc-macro-parentheses) */ \
      31              :   struct function_info_impl<Ret (*MODIFIERS)(Args...) NOEXCEPT_STATUS> {   \
      32              :     using return_type = Ret;                                               \
      33              :     using argument_types = tmpl::list<Args...>;                            \
      34              :     using class_type = void;                                               \
      35              :   }
      36              : 
      37              : FUNCTION_INFO_IMPL_FUNCTION_PTR(, );
      38              : FUNCTION_INFO_IMPL_FUNCTION_PTR(, noexcept);
      39              : FUNCTION_INFO_IMPL_FUNCTION_PTR(const, );
      40              : FUNCTION_INFO_IMPL_FUNCTION_PTR(const, noexcept);
      41              : FUNCTION_INFO_IMPL_FUNCTION_PTR(volatile, );
      42              : FUNCTION_INFO_IMPL_FUNCTION_PTR(volatile, noexcept);
      43              : FUNCTION_INFO_IMPL_FUNCTION_PTR(const volatile, );
      44              : FUNCTION_INFO_IMPL_FUNCTION_PTR(const volatile, noexcept);
      45              : #undef FUNCTION_INFO_IMPL_FUNCTION_PTR
      46              : 
      47              : #define FUNCTION_INFO_IMPL_CLASS(MODIFIERS)                                \
      48              :   template <typename Ret, typename Class,                                  \
      49              :             typename... Args> /* NOLINTNEXTLINE(misc-macro-parentheses) */ \
      50              :   struct function_info_impl<Ret (Class::*)(Args...) MODIFIERS> {           \
      51              :     using return_type = Ret;                                               \
      52              :     using argument_types = tmpl::list<Args...>;                            \
      53              :     using class_type = Class;                                              \
      54              :   }
      55              : 
      56              : FUNCTION_INFO_IMPL_CLASS();
      57              : FUNCTION_INFO_IMPL_CLASS(const);
      58              : FUNCTION_INFO_IMPL_CLASS(noexcept);
      59              : FUNCTION_INFO_IMPL_CLASS(volatile);
      60              : FUNCTION_INFO_IMPL_CLASS(const noexcept);
      61              : FUNCTION_INFO_IMPL_CLASS(const volatile);
      62              : FUNCTION_INFO_IMPL_CLASS(const volatile noexcept);
      63              : FUNCTION_INFO_IMPL_CLASS(volatile noexcept);
      64              : #undef FUNCTION_INFO_IMPL_CLASS
      65              : }  // namespace detail
      66              : /// \endcond
      67              : 
      68              : /*!
      69              :  * \ingroup TypeTraitsGroup
      70              :  * \brief Returns a struct that contains the return type, argument types, and
      71              :  * the class type if the `F` is a non-static member function
      72              :  *
      73              :  * The return class has member type aliases:
      74              :  * - `return_type` The return type of the function
      75              :  * - `argument_types` A `tmpl::list` of the arguments types of the function
      76              :  * - `class_type` The type of the class if the function is a non-static member
      77              :  * function, otherwise `void`
      78              :  *
      79              :  * \note For static member variables the class will be `void` because they are
      80              :  * effectively free functions.
      81              :  */
      82              : template <typename F>
      83            1 : using function_info = detail::function_info_impl<F>;
      84              : }  // namespace tt
        

Generated by: LCOV version 2.0-1