https://issues.dlang.org/show_bug.cgi?id=10920
--- Comment #6 from Kenji Hara <k.hara...@gmail.com> --- Sorry, the OP code was not correct. Precise test case is: // foo.d import bar; void main() { BitArray ba; version(A) pragma(msg, typeof(ba.toString)); FormatSpec!char fs; fs.func(); } // bar.d (same with in comment #0) Command line: $ dmd foo.d --> OK $ dmd -version=A foo.d void() OPTLINK (R) for Win32 Release 8.00.15 Copyright (C) Digital Mars 1989-2013 All rights reserved. http://www.digitalmars.com/ctg/optlink.html foo.obj(foo) Error 42: Symbol Undefined _D3bar18__T10FormatSpecTaZ10FormatSpec4funcMFNaNbNiNfZv --- errorlevel 1 --> NG FormatSpec!char is instantiated in both main() and BitArray.toString(). When -version=A specified, the first instantiation happens in toString(), and its codegen is wrongly judged to be unnecessary. And the second instantiation is ignored and link-failure occurs. It's definitely an issue that depends on the semantic analysis order. --