Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-11-13 11:00:36

0001 /// @file SurfaceHitDispatch.h
0002 /// @brief Compile-time detection for optional surface-hit-aware kernels.
0003 
0004 #ifndef VECGEOM_VOLUMES_SURFACEHITDISPATCH_H_
0005 #define VECGEOM_VOLUMES_SURFACEHITDISPATCH_H_
0006 
0007 #include "VecGeom/base/Global.h"
0008 #include "VecGeom/base/Vector3D.h"
0009 #include "VecGeom/volumes/SurfaceHitView.h"
0010 
0011 #include <type_traits>
0012 #include <utility>
0013 
0014 namespace vecgeom {
0015 
0016 inline namespace VECGEOM_IMPL_NAMESPACE {
0017 
0018 namespace SurfaceHitDispatch {
0019 
0020 template <typename Impl, typename Struct, typename Real_t, typename = void>
0021 struct HasDistanceToOutWithHit : std::false_type {};
0022 
0023 template <typename Impl, typename Struct, typename Real_t>
0024 struct HasDistanceToOutWithHit<
0025     Impl, Struct, Real_t,
0026     std::void_t<decltype(Impl::DistanceToOut(std::declval<Struct const &>(), std::declval<Vector3D<Real_t> const &>(),
0027                                              std::declval<Vector3D<Real_t> const &>(), std::declval<Real_t const &>(),
0028                                              std::declval<Real_t &>(), std::declval<SurfaceHitView<Real_t> *>()))>>
0029     : std::true_type {};
0030 
0031 } // namespace SurfaceHitDispatch
0032 
0033 } // namespace VECGEOM_IMPL_NAMESPACE
0034 } // namespace vecgeom
0035 
0036 #endif // VECGEOM_VOLUMES_SURFACEHITDISPATCH_H_