[Issue 4413] New: typeof(this) doesn't work in method template signature
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Jul 1 14:27:46 PDT 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4413
Summary: typeof(this) doesn't work in method template signature
Product: D
Version: D2
Platform: x86
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: bearophile_hugs at eml.cc
--- Comment #0 from bearophile_hugs at eml.cc 2010-07-01 14:27:43 PDT ---
dmd v2.047 shows a compilation error on the call to bar4, but in my opinion the
compiler has to compile all four those bar methods:
struct Foo {
alias typeof(this) typeof_this;
void bar1(typeof_this other) {}
void bar2()(typeof_this other) {}
void bar3(typeof(this) other) {}
void bar4()(typeof(this) other) {}
}
void main() {
Foo f;
f.bar1(f); // OK
f.bar2(f); // OK
f.bar3(f); // OK
f.bar4(f); // ERR
}
The generated errors:
test.d(13): Error: template test.Foo.bar4() does not match any function
template declaration
test.d(13): Error: template test.Foo.bar4() cannot deduce template function
from argument types !()(Foo)
The problem of bar4 has shown up in D2 code similar to this one, where I have
used typeof(this) to follow the DRY strategy and avoid repeating the struct
name more than one time:
struct Vec2 {
float x, y;
auto opBinary(string op)(typeof(this) other) if (op == "+") {
...
}
}
A workaround that can be used is:
struct Vec2 {
float x, y;
alias typeof(this) typeof_this;
auto opBinary(string op)(typeof_this other) if (op == "+") {
...
}
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list