On Friday, 1 April 2016 at 19:03:03 UTC, ag0aep6g wrote:
I dislike that the type depends only on the given name. This
effectively means that the names are in a global namespace.
[snip]
I can't think of a truly nice way to accomplish this, though.
As far as I see, it needs a mixin of some kind.
The usual way to fix it would be to include __FILE__ and __LINE__
in the template arguments:
// In units/package.d:
struct BaseUnit(string name, string symbol = null, string file =
__FILE__, size_t line = __LINE__)
{
// ...
}
// in foo.d:
import experimental.units;
struct A
{
// Actual type is BaseUnit!("Ampere", "A", "foo", 5):
alias BaseUnit!("Ampere", "A") Ampere;
enum ampere = Ampere.init;
}
struct B
{
// Actual type is BaseUnit!("Ampere", "A", "foo", 12):
alias BaseUnit!("Ampere", "A") Ampere;
enum ampere = Ampere.init;
}
void main() {
assert(!is(B.Ampere == A.Ampere));
}
--
Simen