December 26, 2012
module Test;

import std.stdio;

extern(C++)
{
    struct A
    {
        int i = 0;

    public:

        void TestExtern()
        {

        }
    }

    struct B
    {
        int i = 0;

        void TestExtern()
        {

        }
    }
}

void main()
{
    writeln("hello");
}


dmd -v -m32 test.d result:
C:\dmd2\windows\bin\link.exe Test,,nul,user32+kernel32/noi;
OPTLINK (R) for Win32  Release 8.00.12
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
Test.obj(Test)  Offset 00532H Record Type 00C3
 Error 1: Previous Definition Different : ?TestExtern@@YEXXZ (void syscall TestExtern(void ))
--- errorlevel 1

dmd -v -m64 test.d result:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\link.exe /NOLOGO Test   /MERGE:.minfobg=.minfodt /MERGE:.minfoen=
.minfodt /MERGE:._deh_bg=._deh_eh /MERGE:._deh_en=._deh_eh "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\am
d64" "/LIBPATH:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\lib\x64"
Microsoft (R) Incremental Linker Version 11.00.50727.1
Copyright (C) Microsoft Corporation.  All rights reserved.

Test.obj : fatal error LNK1179: 无效或损坏的文件: 重复的 COMDAT“?TestExtern@@YAXXZ”
--- errorlevel 1179


It's OK in dmd 2.060, TestExtern demangle same with in c++;