19 template <
class TPo
int>
22 template <concepts::ScalarType TPo
int>
23 struct PointTraits<TPoint> {
26 static bool constexpr kIsFloatingPoint = std::is_floating_point_v<Scalar>;
27 static bool constexpr kIsInteger = std::is_integral_v<Scalar>;
29 static int constexpr kRows = 1;
30 static int constexpr kCols = 1;
32 static bool constexpr kHasInfinity =
33 std::numeric_limits<Scalar>::has_infinity;
34 static bool constexpr kHasQuietNan =
35 std::numeric_limits<Scalar>::has_quiet_NaN;
36 static bool constexpr kHasSignalingNan =
37 std::numeric_limits<Scalar>::has_signaling_NaN;
40 return std::numeric_limits<Scalar>::lowest();
46 template <concepts::EigenDenseType TPo
int>
47 struct PointTraits<TPoint> {
48 using Scalar =
typename TPoint::Scalar;
49 static int constexpr kRows = TPoint::RowsAtCompileTime;
50 static int constexpr kCols = TPoint::ColsAtCompileTime;
52 static bool constexpr kIsFloatingPoint = std::is_floating_point_v<Scalar>;
53 static bool constexpr kIsInteger = std::is_integral_v<Scalar>;
55 static bool constexpr kHasInfinity =
56 std::numeric_limits<Scalar>::has_infinity;
57 static bool constexpr kHasQuietNan =
58 std::numeric_limits<Scalar>::has_quiet_NaN;
59 static bool constexpr kHasSignalingNan =
60 std::numeric_limits<Scalar>::has_signaling_NaN;
63 return TPoint::Constant(std::numeric_limits<Scalar>::lowest());
65 static auto min() -> TPoint {
68 static auto max() -> TPoint {
72 return TPoint::Constant(std::numeric_limits<Scalar>::epsilon());