
a) It might be handy, though, to have (for example) a log function that enforces unitless quantities. For example,
log ( velocity * time / meters )
is fine, but if you forget to multiply by the time, you get a helpful error message.
Cases where the function argument reduces to a dimensionless quantity already all work because dimensionless quantities can be implicitly converted to their value type : std::cout << std::sqrt(quantity<SI::velocity> (9.0*SI::meters_per_second)*SI::seconds/SI::meters) << std::endl; gives 3
b) It might also be handy, if possible, to have some functions that take units and know what to do; for example, sqrt (m*m) properly returns meters, and so forth.
True - we can support integral and rational powers, but not irrational ones... Matthias