Consider the above code without it:
std.debug.print("hello world!\n", struct{}{});
std.debug.print("{}!\n", struct{string: []const u8}{ .string = "hello world"});
Consider the above code without it:
Now add a value: Quite unwieldy. Zig used to have variadic functions and it was difficult to work with, complicated metaprogramming, and made how things work less obvious during reading. It was also pretty much only ever used for the "print" function.