On Thursday, 8 February 2018 at 17:06:55 UTC, H. S. Teoh wrote:
On Thu, Feb 08, 2018 at 08:26:03AM -0500, Steven Schveighoffer
via Digitalmars-d wrote: [...]
The extra data in the object file comes from the inclusion of
the hexStringImpl function, and from the template parameter
_D3std4conv__T9hexStringVAyaa8_6465616462656566ZQBiyAa is in
there as well, which will always be larger than the actual
string passed to hexString).
This is one area that really should be improved. Is there some
easy way in the compiler to mark a template function as "only
used in CTFE", and not emit it into the object file if there
are no other runtime references to it? I'm thinking of some
kind of boolean attribute that defaults to false, and gets set
if the function is referenced by runtime code. During codegen,
any function that doesn't have this attribute set will be
My speculation is that this would lead to a good amount of
reduction in template bloat, given how pervasively CTFE is used
in Phobos (and idiomatic D in general).
Or maybe you can get away with just using a good compiler/linker
that supports LTO. It's quite mature in GCC now, so it's
probably worth trying with GDC.