September 16, 2014
https://issues.dlang.org/show_bug.cgi?id=13480

          Issue ID: 13480
           Summary: Input range formatting should not format as "elements"
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: Phobos
          Assignee: nobody@puremagic.com
          Reporter: jakobovrum@gmail.com

Consider the following (output in comments):

---
import std.algorithm;
import std.stdio;
import std.string;

void main()
{
    auto ror = ["one", "two", "three"];
    writefln("%(%s%| %)", [1, 2, 3]); // 1 2 3
    writefln("%(%s%| %)", "abc"); // 'a' 'b' 'c'
    writefln("%(%s%|, %)", ror); // "one", "two", "three"
    writefln("%s", ror.joiner(", ")); // one, two, three
    writefln("%s", ror); // ["one", "two", "three"]
}
---

writefln statement #2 and #3 don't make any sense. Formatting characters and strings using the element markup style (`formatElement`), which forces single and double quotes around the character or string respectively, defeats the purpose of range-based formatting, which allows you to customize the fluff around each element.

Not adding quotes is the more general solution; when quotes are desired, they can be explicitly added like so: `%("%s"%|, %)`.

This behaviour neuters range-based formatting severely: std.format deals with creating text, and strings and characters are the most basic units of text, yet this behaviour renders range-based formatting unusable when quotes are not desired (which is probably the vast majority of cases).

--