www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to check if aggregate member is static templated method?

reply drug <drug2004 bk.ru> writes:
https://run.dlang.io/is/zHT2XZ
Feb 15 2018
parent reply drug <drug2004 bk.ru> writes:
15.02.2018 16:50, drug пишет:
 https://run.dlang.io/is/zHT2XZ
I can check againts if member is either static function or template. But I failed to check if it both static and templated.
Feb 15 2018
parent reply RazvanN <razvan.nitu1305 gmail.com> writes:
On Thursday, 15 February 2018 at 13:51:41 UTC, drug wrote:
 15.02.2018 16:50, drug пишет:
 https://run.dlang.io/is/zHT2XZ
I can check againts if member is either static function or template. But I failed to check if it both static and templated.
The best I could come up with is: struct Foo { static staticMethod() { } static templatedStaticMethod(T)(T t) { } } void main() { static if(__traits(isTemplate, Foo.templatedStaticMethod) && __traits(isStaticFunction, Foo.templatedStaticMethod!int)) { writeln("win"); } } It seems like a templated method can be queried if it is static only after it's instantiation. Hope this helps. Cheers, RazvanN
Feb 15 2018
next sibling parent drug <drug2004 bk.ru> writes:
15.02.2018 18:49, RazvanN пишет:
 On Thursday, 15 February 2018 at 13:51:41 UTC, drug wrote:
 15.02.2018 16:50, drug пишет:
 https://run.dlang.io/is/zHT2XZ
I can check againts if member is either static function or template. But I failed to check if it both static and templated.
The best I could come up with is: struct Foo {     static staticMethod()     {     }     static templatedStaticMethod(T)(T t)     {     } } void main() {     static if(__traits(isTemplate, Foo.templatedStaticMethod) &&                   __traits(isStaticFunction, Foo.templatedStaticMethod!int))         {              writeln("win");         } } It seems like a templated method can be queried if it is static only after it's instantiation. Hope this helps. Cheers, RazvanN
Thank you for answer!
Feb 15 2018
prev sibling parent bauss <jj_1337 live.dk> writes:
On Thursday, 15 February 2018 at 15:49:47 UTC, RazvanN wrote:
 On Thursday, 15 February 2018 at 13:51:41 UTC, drug wrote:
 15.02.2018 16:50, drug пишет:
 https://run.dlang.io/is/zHT2XZ
I can check againts if member is either static function or template. But I failed to check if it both static and templated.
The best I could come up with is: struct Foo { static staticMethod() { } static templatedStaticMethod(T)(T t) { } } void main() { static if(__traits(isTemplate, Foo.templatedStaticMethod) && __traits(isStaticFunction, Foo.templatedStaticMethod!int)) { writeln("win"); } } It seems like a templated method can be queried if it is static only after it's instantiation. Hope this helps. Cheers, RazvanN
I would kinda argue that it's a bug, because checking whether a template function is static can become very complex if the template also has constraints etc.
Feb 16 2018