I was wondering what the idiomatic D way of implementing strong types. Boost has something along these lines using classes:
http://www.boost.org/doc/libs/1_37_0/boost/strong_typedef.hpp

When programming in C++ I find that the compiler does not necessarily generate good code with these types, and I usually use C++11 enum class, e.g.

enum class dollars_t : uint32_t {}
enum class cents_t : uint32_t {}
/* .. code e.g. for converting between cents and dollars .. */
void do_something_with_dollars(dollars_t) {} // this will fail to compile if you try to pass it cents_t or uint32_t

This is obviously a gross abuse of the enum class feature.

I think there is also a way of doing this (in C++) using templates a la std::chrono

But enough about C++. Is there an idiomatic way of doing this in D, if so what is it?

Thanks!
Charles

Reply via email to