SpECTRE Documentation Coverage Report
Current view: top level - Utilities/TypeTraits - CreateHasStaticMemberVariable.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 66.7 % 3 2
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 <type_traits>
       7              : 
       8              : #include "Utilities/NoSuchType.hpp"
       9              : 
      10              : /// @{
      11              : /*!
      12              :  * \ingroup TypeTraitsGroup
      13              :  * \brief Generate a type trait to check if a class has a `static constexpr`
      14              :  * variable, optionally also checking its type.
      15              :  *
      16              :  * To generate the corresponding `_v` metafunction, call
      17              :  * `CREATE_HAS_STATIC_MEMBER_VARIABLE` first and then
      18              :  * `CREATE_HAS_STATIC_MEMBER_VARIABLE_V`.
      19              :  *
      20              :  * \example
      21              :  * \snippet Test_CreateHasStaticMemberVariable.cpp CREATE_HAS_EXAMPLE
      22              :  *
      23              :  * \see `CREATE_IS_CALLABLE`
      24              :  */
      25              : // Use `NoSuchType*****` to represent any `VariableType`, i.e. not checking the
      26              : // variable type at all. If someone has that many pointers to a thing that isn't
      27              : // useful, it's their fault...
      28            1 : #define CREATE_HAS_STATIC_MEMBER_VARIABLE(CONSTEXPR_NAME)                     \
      29              :   template <typename CheckingType, typename VariableType = NoSuchType*****,   \
      30              :             typename = std::void_t<>>                                         \
      31              :   struct has_##CONSTEXPR_NAME : std::false_type {};                           \
      32              :                                                                               \
      33              :   template <typename CheckingType, typename VariableType>                     \
      34              :   struct has_##CONSTEXPR_NAME<CheckingType, VariableType,                     \
      35              :                               std::void_t<std::remove_const_t<decltype(       \
      36              :                                   CheckingType::CONSTEXPR_NAME)>>>            \
      37              :       : std::bool_constant<std::is_same_v<VariableType, NoSuchType*****> or   \
      38              :                            std::is_same_v<std::remove_const_t<decltype(       \
      39              :                                               CheckingType::CONSTEXPR_NAME)>, \
      40              :                                           VariableType>> {};
      41              : 
      42              : // Separate macros to avoid compiler warnings about unused variables
      43            1 : #define CREATE_HAS_STATIC_MEMBER_VARIABLE_V(CONSTEXPR_NAME)                 \
      44              :   template <typename CheckingType, typename VariableType = NoSuchType*****> \
      45              :   static constexpr const bool has_##CONSTEXPR_NAME##_v =                    \
      46              :       has_##CONSTEXPR_NAME<CheckingType, VariableType>::value;
      47              : /// @}
        

Generated by: LCOV version 2.0-1