@@ -296,21 +296,25 @@ static_assert(!ReferenceOf<decltype(dimensionless[one]), isq::rotation>);
296296static_assert (!ReferenceOf<decltype (dimensionless[one]), isq::angular_measure>);
297297
298298// RepresentationOf
299+ // int: real scalar and (as a degenerate 1D case) vector, but not complex/tensor
299300static_assert (RepresentationOf<int , quantity_character::real_scalar>);
300301static_assert (!RepresentationOf<int , quantity_character::complex_scalar>);
301302static_assert (RepresentationOf<int , quantity_character::vector>);
302303static_assert (!RepresentationOf<int , quantity_character::tensor>);
303304
305+ // double: same as int
304306static_assert (RepresentationOf<double , quantity_character::real_scalar>);
305307static_assert (!RepresentationOf<double , quantity_character::complex_scalar>);
306308static_assert (RepresentationOf<double , quantity_character::vector>);
307309static_assert (!RepresentationOf<double , quantity_character::tensor>);
308310
311+ // bool: disabled via disable_real<bool>
309312static_assert (!RepresentationOf<bool , quantity_character::real_scalar>);
310313static_assert (!RepresentationOf<bool , quantity_character::complex_scalar>);
311314static_assert (!RepresentationOf<bool , quantity_character::vector>);
312315static_assert (!RepresentationOf<bool , quantity_character::tensor>);
313316
317+ // non-numeric type: not a representation at all
314318static_assert (!RepresentationOf<std::optional<int >, quantity_character::real_scalar>);
315319
316320#if MP_UNITS_HOSTED
@@ -319,16 +323,31 @@ static_assert(RepresentationOf<std::complex<double>, quantity_character::complex
319323static_assert (!RepresentationOf<std::complex <double >, quantity_character::vector>);
320324static_assert (!RepresentationOf<std::complex <double >, quantity_character::tensor>);
321325
326+ // cartesian_vector<double>: 3D vector, not scalar
322327static_assert (!RepresentationOf<cartesian_vector<double >, quantity_character::real_scalar>);
323328static_assert (!RepresentationOf<cartesian_vector<double >, quantity_character::complex_scalar>);
324329static_assert (RepresentationOf<cartesian_vector<double >, quantity_character::vector>);
325330static_assert (!RepresentationOf<cartesian_vector<double >, quantity_character::tensor>);
326331
332+ // cartesian_vector<int>: integer element type is supported (norm() returns double via std::hypot)
333+ static_assert (!RepresentationOf<cartesian_vector<int >, quantity_character::real_scalar>);
334+ static_assert (!RepresentationOf<cartesian_vector<int >, quantity_character::complex_scalar>);
335+ static_assert (RepresentationOf<cartesian_vector<int >, quantity_character::vector>);
336+ static_assert (!RepresentationOf<cartesian_vector<int >, quantity_character::tensor>);
337+
338+ // cartesian_vector<complex<double>>: no hypot(complex,complex,complex) -> not a vector representation
327339static_assert (!RepresentationOf<cartesian_vector<std::complex <double >>, quantity_character::real_scalar>);
328340static_assert (!RepresentationOf<cartesian_vector<std::complex <double >>, quantity_character::complex_scalar>);
329341static_assert (!RepresentationOf<cartesian_vector<std::complex <double >>, quantity_character::vector>);
330342static_assert (!RepresentationOf<cartesian_vector<std::complex <double >>, quantity_character::tensor>);
331343
344+ // quantity types must never themselves be a representation (NotQuantity guard)
345+ static_assert (!RepresentationOf<quantity<si::metre>, quantity_character::real_scalar>);
346+ static_assert (!RepresentationOf<quantity<si::metre>, quantity_character::vector>);
347+
348+ // cartesian_vector whose element is a quantity must not be a representation
349+ static_assert (!RepresentationOf<cartesian_vector<quantity<si::metre>>, quantity_character::vector>);
350+
332351static_assert (!RepresentationOf<std::chrono::seconds, quantity_character::real_scalar>);
333352static_assert (!RepresentationOf<std::string, quantity_character::real_scalar>);
334353#endif
0 commit comments