Marco: >>> auto distance = 100.km; >>> auto speed = 120.km/hour;
>> Sounds fun. I mean, it makes me happy to see code written like this instead of >> Distance distance = new Kilometers(100); >> Speed speed = Speed.fromDistanceByTime(new Kilometers(120), new Hours(1)); Yeah, that was exactly one of my goals :) David: > I find multiplication to read much more natural: > --- > enum km = kilo * meter; > > auto distance = 100.0 * km; > auto speed = 100.0 * km / hour; > > auto timeToDest = distance / speed; > --- This is good too. I have code that autogenerate the SI-prefixed versions (not on Github, I should clean it and push), but thought about offering prefix functions by themselves. Hmm, looking at it, I guess kilo is just 1000 as an enum in your code? That's a good idea. Anyway, multiplication is good, I just looked for an excuse to play with UFCS :) > See http://klickverbot.at/code/units/ for a slightly neglected implementation of this scheme. It supports stuff like defining new units with arbitrary (potentially runtime) conversion factors, properly typechecked affine units (think degrees celsius), etc. Ah good. I remembered someone posting something on units-checking, but couldn't find the message. I also have something on celsius/kelvin and wondered if I needed to go beyond affine, to fully generalize the concept. Btw, is °C substraction authorized with your module, or multiplication? I wondered what to forbid and what to authorize. And I (re)discovered while browsing Wikipedia the numerous temperature units I saw at school 15 years ago :) > – but any error messages and symbol names will probably look like if the compiler had a seizure. why?