42 typename RemoveRef<T>::ScalarType s,
43 typename RemoveRef<T>::ScalarType& sR,
44 typename RemoveRef<T>::BaseMatrixType& baseObjR) {
46 typename RemoveRef<T>::ScalarType;
47 typename RemoveRef<T>::BaseMatrixType;
54 { obj.isDegenerate() } -> std::same_as<bool>;
55 { obj.dot(obj) } -> std::same_as<
decltype(s)>;
56 { obj.angle(obj) } -> std::same_as<
decltype(s)>;
57 { obj.dist(obj) } -> std::same_as<
decltype(s)>;
58 { obj.squaredDist(obj) } -> std::same_as<
decltype(s)>;
59 { obj.norm() } -> std::same_as<
decltype(s)>;
60 { obj.squaredNorm() } -> std::same_as<
decltype(s)>;
61 { obj.size() } -> std::same_as<uint>;
63 { obj.hash() } -> std::same_as<std::size_t>;
65 { obj(uint()) } -> std::convertible_to<
decltype(s)>;
66 { obj[uint()] } -> std::convertible_to<
decltype(s)>;
68 { obj == obj } -> std::same_as<bool>;
69 { obj <=> obj } -> std::convertible_to<std::partial_ordering>;
71 { obj.normalized() } -> std::convertible_to<RemoveRef<T>>;
72 { obj + s } -> std::convertible_to<RemoveRef<T>>;
73 { obj + obj } -> std::convertible_to<RemoveRef<T>>;
75 { -obj } -> std::convertible_to<RemoveRef<T>>;
76 { obj - s } -> std::convertible_to<RemoveRef<T>>;
77 { obj - obj } -> std::convertible_to<RemoveRef<T>>;
79 { obj* s } -> std::convertible_to<RemoveRef<T>>;
81 { obj / s } -> std::convertible_to<RemoveRef<T>>;
85 { obj.setConstant(s) } -> std::same_as<
decltype(baseObjR)>;
86 { obj.setZero() } -> std::same_as<
decltype(baseObjR)>;
87 { obj.setOnes() } -> std::same_as<
decltype(baseObjR)>;
88 { obj.normalize() } -> std::same_as<void>;
90 { obj(uint()) } -> std::same_as<
decltype(sR)>;
91 { obj[uint()] } -> std::same_as<
decltype(sR)>;
93 { obj = obj } -> std::same_as<T&>;
95 { obj += s } -> std::same_as<T&>;
96 { obj += obj } -> std::same_as<
decltype(baseObjR)>;
98 { obj -= s } -> std::same_as<T&>;
99 { obj -= obj } -> std::same_as<
decltype(baseObjR)>;
101 { obj *= s } -> std::same_as<
decltype(baseObjR)>;
102 { obj /= s } -> std::same_as<
decltype(baseObjR)>;