17 #include <type_traits>
39 decltype(std::declval<T>().fourPosition(std::declval<GeometryContext>()));
44 decltype(std::declval<T>().
position(std::declval<GeometryContext>()));
53 decltype(std::declval<T>().absoluteMomentum());
58 decltype(std::declval<T>().referenceSurface());
65 exists<TypeParametersVector, const T>;
67 exists<TypeCovarianceMatrix, const T>;
71 std::is_convertible_v<ReturnTypeParameters<T>,
BoundVector>;
73 std::is_convertible_v<ReturnTypeCovariance<T>,
74 std::optional<BoundSquareMatrix>>;
76 identical_to<Vector4, ReturnTypeFourPositionFromContext, const T>;
78 identical_to<Vector3, ReturnTypePositionFromContext, const T>;
82 identical_to<Vector3, ReturnTypeDirection, const T>;
88 identical_to<const Surface&, ReturnTypeReferenceSurface, const T>;
97 "Missing or invalid 'fourPosition' method");
99 "Missing or invalid 'position' method");
100 static_assert(
hasMethodTime,
"Missing or invalid 'time' method");
103 "Missing or invalid 'absoluteMomentum' method");
106 "Missing or invalid 'referenceSurface' method");
116 template <
typename T>
121 exists<TypeParametersVector, const T>;
123 exists<TypeCovarianceMatrix, const T>;
127 std::is_convertible_v<ReturnTypeParameters<T>,
FreeVector>;
129 std::is_convertible_v<ReturnTypeCovariance<T>,
130 std::optional<FreeSquareMatrix>>;
132 identical_to<Vector4, ReturnTypeFourPosition, const T>;
134 identical_to<Vector3, ReturnTypePosition, const T>;
138 identical_to<Vector3, ReturnTypeDirection, const T>;
151 "Missing or invalid 'fourPosition' method");
153 static_assert(
hasMethodTime,
"Missing or invalid 'time' method");
156 "Missing or invalid 'absoluteMomentum' method");
166 template <
typename parameters_t>
170 template <
typename parameters_t>