On 2012-10-30 18:44, Andrej Mitrovic wrote:

All of them.

void main()
{
     pragma(msg, MyFn);
     pragma(msg, typeof(MyStruct.foo2));
     pragma(msg, typeof(bar));
}

extern (C) int function(int)
extern (C) int function(int)
extern (C) void(extern (C) int function(int) foo3)
extern (C) int function(int)
extern (C) int function(int)
extern (C) void(extern (C) int function(int) foo3)

It's because extern(C): leaks everywhere, whether on purpose or not.
It can be a benefit for writing shorter code, but when reading such
code it's easy to forget to check for an extern(C): declaration at the
top and just wrongly assume that it's all extern(D).

It doesn't leak into local declarations in a function:

extern (C):

void foo ()
{
    alias void function () Foo;

    void function (int) a;
    auto b = cast(void function ()) a;

    pragma(msg, Foo);
    pragma(msg, typeof(a));
    pragma(msg, typeof(b));
}

void function()
void function(int)
void function()

--
/Jacob Carlborg

Reply via email to