SpECTRE Documentation Coverage Report
Current view: top level - Utilities/TypeTraits - CreateHasTypeAlias.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 type alias with a
      14              :  * particular name, optionally also checking its type.
      15              :  *
      16              :  * To generate the corresponding `_v` metafunction, call
      17              :  * `CREATE_HAS_TYPE_ALIAS` first and then `CREATE_HAS_TYPE_ALIAS_V`.
      18              :  *
      19              :  * \example
      20              :  * \snippet Test_CreateHasTypeAlias.cpp CREATE_HAS_TYPE_ALIAS
      21              :  *
      22              :  * \see `CREATE_IS_CALLABLE`
      23              :  */
      24              : // Use `NoSuchType*****` to represent any `AliasType`, i.e. not checking the
      25              : // alias type at all. If someone has that many pointers to a thing that isn't
      26              : // useful, it's their fault...
      27            1 : #define CREATE_HAS_TYPE_ALIAS(ALIAS_NAME)                                 \
      28              :   template <typename CheckingType, typename AliasType = NoSuchType*****,  \
      29              :             typename = std::void_t<>>                                     \
      30              :   struct has_##ALIAS_NAME : std::false_type {};                           \
      31              :                                                                           \
      32              :   template <typename CheckingType, typename AliasType>                    \
      33              :   struct has_##ALIAS_NAME<CheckingType, AliasType,                        \
      34              :                           std::void_t<typename CheckingType::ALIAS_NAME>> \
      35              :       : std::bool_constant<                                               \
      36              :             std::is_same_v<AliasType, NoSuchType*****> or                 \
      37              :             std::is_same_v<typename CheckingType::ALIAS_NAME, AliasType>> {};
      38              : // Separate macros to avoid compiler warnings about unused variables
      39            1 : #define CREATE_HAS_TYPE_ALIAS_V(ALIAS_NAME)                              \
      40              :   template <typename CheckingType, typename AliasType = NoSuchType*****> \
      41              :   static constexpr const bool has_##ALIAS_NAME##_v =                     \
      42              :       has_##ALIAS_NAME<CheckingType, AliasType>::value;
      43              : /// @}
        

Generated by: LCOV version 2.0-1