Reflection

Jonathan M Davis jmdavisProg at gmx.com
Tue Feb 28 10:22:40 PST 2012


On Tuesday, February 28, 2012 06:56:10 Joshua Niehus wrote:
> Hello,
> 
> I dont understand the following snippet's output:
> 
> import std.stdio, std.traits;
> void main() {
> writeln(isSomeFunction!(writeln));
> writeln(isCallable!(writeln));
> writeln("Yes I am...");
> }
> 
> /* OUTPUT */
> false
> false
> Yes I am...
> 
> If 'writeln' isn't a method/function and it's not callable, then
> what is it?

writeln doesn't even really exist as far as the compiler is concerned until 
it's been instantiated. So, testing writeln isn't going to work. You need to 
either test a specific instantiation (e.g. isSomeFunction!(writeln!string))), 
or you need to just test that particular call works (e.g. 
is(typeof(writeln(arg)))). The second is probably better, since that's 
generally what you really care about - is it compilable with the given set of 
arguments.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list