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