[Issue 17714] New: Function template - this T for static methods
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Thu Aug 3 07:00:09 PDT 2017
https://issues.dlang.org/show_bug.cgi?id=17714
Issue ID: 17714
Summary: Function template - this T for static methods
Product: D
Version: D2
Hardware: x86_64
OS: Windows
Status: NEW
Severity: enhancement
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: timosesu at gmail.com
For static method templates the this T will not work to deduce the calling
derived class/interface.
Although this information is present at compile-time, there seems to be no way
to easily access the calling derived class:
interface I
{
static void test(this T)()
{
writeln(T.type.stringof);
}
}
abstract class A
{
static void test(this T)()
{
writeln(T.type.stringof);
}
}
class B : A
{
alias type = uint;
}
class C : I {
alias type = int;
}
void main() {
B.test();
C.test();
}
Throws:
Error: template app.A.test cannot deduce function from argument types !()(),
candidates are:
app.A.test(this T)()
Error: template app.I.test cannot deduce function from argument types !()(),
candidates are:
app.I.test(this T)()
Shouldn't it be possible to access the class which is calling the static method
as easily as "this T" as template parameter? Would "this T" be too confusing,
as it is a static method and this does not really exist?
To simplify, the following should be possible in some way (if not via "this
T"):
class A
{
// T will be whatever class is calling this method
static void func (this T)() { };
}
A.func();
Possibly related issue:
https://issues.dlang.org/show_bug.cgi?id=14191
--
More information about the Digitalmars-d-bugs
mailing list