[Issue 14128] New: wrong alias
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Thu Feb 5 19:50:18 PST 2015
https://issues.dlang.org/show_bug.cgi?id=14128
Issue ID: 14128
Summary: wrong alias
Product: D
Version: D1 & D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: major
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: vlevenfeld at gmail.com
The line "alias b = that.object" seems to alias this.object:
struct TrivialFunctor (T)
{
T object;
int opCmp ()(auto ref TrivialFunctor!T that)
{
alias a = this.object;
alias b = that.object;
import std.stdio;
writeln (this.object, ` < `, that.object); // 1 < 2
writeln (a, ` < `, b); // 1 < 1
writeln (&(this.object) == &(that.object)); // false, ok
writeln (&a == &b); // true?!
stdout.flush;
if (a < b)
return -1;
else if (a > b)
return 1;
else return 0;
}
auto opBinary (string op)(auto ref TrivialFunctor!T that)
{
return TrivialFunctor (mixin(q{this.object } ~ op ~ q{ that.object}));
}
}
auto trivial_functor (T)(T value)
{
return TrivialFunctor!T (value);
}
void main ()
{
TrivialFunctor!int a = 1.trivial_functor, b = 2.trivial_functor;
auto c = a + b;
assert (a < b && b < c); // fails
}
--
More information about the Digitalmars-d-bugs
mailing list