SpECTRE Documentation Coverage Report
Current view: top level - Utilities/TypeTraits - FastPointerCast.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 <type_traits>
       7              : #include <utility>
       8              : 
       9              : #include "Utilities/Requires.hpp"
      10              : 
      11              : namespace tt {
      12              : namespace detail {
      13              : template <typename T, typename U, typename = void>
      14              : struct can_static_cast : std::false_type {};
      15              : 
      16              : template <typename T, typename U>
      17              : struct can_static_cast<T, U,
      18              :                        std::void_t<decltype(static_cast<U>(std::declval<T>()))>>
      19              :     : std::true_type {};
      20              : 
      21              : template <typename T, typename U>
      22              : static constexpr bool can_static_cast_v = can_static_cast<T, U>::value;
      23              : }  // namespace detail
      24              : 
      25              : /*!
      26              :  * \brief Cast `t` which is of type `T*` to a `U`. If a `static_cast<U>(t)` is
      27              :  * possible, use that, otherwise use `dynamic_cast<U>(t)`.
      28              :  */
      29              : template <typename U, typename T>
      30            1 : U fast_pointer_cast(T* t) {
      31              :   if constexpr (detail::can_static_cast_v<T*, U>) {
      32              :     return static_cast<U>(t);
      33              :   } else {
      34              :     return dynamic_cast<U>(t);
      35              :   }
      36              : }
      37              : }  // namespace tt
        

Generated by: LCOV version 2.0-1