I'm only asking because I can't use it inside of a pragma(msg) call
since CTFE can't do C-style variadic functions yet. Is `format`
defined this way for performance reasons? (to avoid template bloat?)

std.string.format is using a D-style variadic parameter list. This would
be a C-style variadic parameter list:
extern (C) string format (int c, ...);
It might just be an old function from D1 when template tuple parameters
where not just that much.
--
/Jacob Carlborg

The compiler disagrees with you:
D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\string.d(2432): Error:
function std.string.format C-style variadic functions are not yet
implemented in CTFE
L2432:
string format(...)
I don't see any other format() overloads in std.string.

thunderbird hates me. second time I give an answer made redundant by
orphaned subthread.
I'll counter by giving random unsolicited thoughts on Format:
don't use it for codegen (or any long format strings, I suppose). dmd
chokes on it very quickly.
format specifiers could use positional parameters or something. Last
summer I actually wrote a Replace template to scratch that itch. dmd
choked on it pretty quickly too.

thunderbird hates me. second time I give an answer made redundant by
orphaned subthread.

I've got the same problem with most of Jonathan's posts. I use flrn, an
obsure news reader that nobody here probably knows about, so I thought
it was just me. It seems that the Reference field in Jonathan's posts
are unusual and break threads in some news reader.
Would anyone know a solution (either for Elley and me, or for Jonathan)?
--
Christophe

thunderbird hates me. second time I give an answer made redundant by
orphaned subthread.

I'll counter by giving random unsolicited thoughts on Format:
don't use it for codegen (or any long format strings, I suppose). dmd
chokes on it very quickly.
format specifiers could use positional parameters or something. Last
summer I actually wrote a Replace template to scratch that itch. dmd
choked on it pretty quickly too.

The compiler disagrees with you:
D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\string.d(2432): Error:
function std.string.format C-style variadic functions are not yet
implemented in CTFE
L2432:
string format(...)
I don't see any other format() overloads in std.string.

That's likely a bug. D variadic functions push the TypeInfo of each
parameter onto the stack as well as the parameters themselves.
Unfortunately, it's probably just a wrong error message, I doubt D
variadic parameters are supported in CTFE.
-Steve

The compiler disagrees with you:
D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\string.d(2432): Error:
function std.string.format C-style variadic functions are not yet
implemented in CTFE
L2432:
string format(...)
I don't see any other format() overloads in std.string.

The compiler disagrees with you:
D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\string.d(2432): Error:
function std.string.format C-style variadic functions are not yet
implemented in CTFE
L2432:
string format(...)
I don't see any other format() overloads in std.string.

That's likely a bug. D variadic functions push the TypeInfo of each
parameter onto the stack as well as the parameters themselves.
Unfortunately, it's probably just a wrong error message, I doubt D
variadic parameters are supported in CTFE.
-Steve