Traits question and compiler crash

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Apr 14 03:43:15 PDT 2015


On Tuesday, 14 April 2015 at 09:24:04 UTC, Filippo Fantini wrote:
> Hello everyone!
>
> I'm new to D.
> While playing with around with traits,
> I ended up writing this short example:
>
>
> module test;
>
> class Foo
> {
>     private int _value = 21;
>
>     void foo()
>     {
>         import std.traits;
>
>         alias funs = MemberFunctionsTuple!( typeof( this ), 
> "bar" );
>
>         version( crash )
> 	{
>             void function( string ) b = &funs[ 0 ];
>             b( "world" );
>         }
>
>         funs[ 0 ]( "world" );
>     }
>
>     void bar( string s )
>     {
>         import std.stdio;
>         writeln( "hello ", s, "! ", _value );
>     }
> }
>
> void main()
> {
>     auto f = new Foo();
>     f.foo();
> }
>
>
> My first question is why building this with
> dmd test.d
>
> the line:
> funs[ 0 ]( "world" );
>
> does not crash, as I would expect because there's no this 
> pointer to access _value when calling the member function.

That's the same as `Foo.bar("world");`, which also works. The 
this pointer is passed even though the call does not show it. I 
don't know if or where this is specified, but I'm pretty sure 
it's supposed to work like this.

> The second question is why when building with:
> dmd -version=crash test.d
>
> the compiler just crashes instead.

Every compiler crash is a bug. Please report it at 
<http://issues.dlang.org/>.


More information about the Digitalmars-d-learn mailing list