Templates currently do nasty things with DDL.
The problem comes from DMD's tendency to glom template instances to individual .obj's if they are compiled individually. The Linker presently blindly resolves 'weak' symbols as externs wherever possible, but keeps the related fixup information. Should a module have fixups that point to the old weak address, they fail when the resolved address lives in the host's memory space.
Solution A: allow the Linker to communicate to the Module to drop fixups that target a given symbol.
Solution B (relies on #55): have the Linker change a symbol's information to reflect the local/external address. The module will then be responsible for throwing out fixup information that attempts to fix an externally resolved address. Internally weak addresses will still be valid for self-resolution.