https://issues.dlang.org/show_bug.cgi?id=3821

--- Comment #11 from Steven Schveighoffer <[email protected]> ---
It's possible, but at a huge cost. Just to see if you are printing infinitely
recursively, something that you may not expect to actually work. And also
impossible to know the state of the object, it could use things outside the
object to print (i.e. even though it's printing the same object, maybe it
terminates anyway).

Just don't print something that recurses infinitely.

Note that there's nothing stopping a type which MIGHT print recursively from
figuring this out in its toString function. e.g.:

struct List1
{
    int x;
    List1 *next;
    private bool printing = false;
    void toString(void delegate(const(char)[]) dg) const
    {
        if(printing)
        {
            dg("...");
            return;
        }
        printing = true;
        scope(exit) printing = false;
        import std.format;
        formattedWrite(dg, "%s ->", x);
        if(next is null)
            dg("null");
        else
            next.toString(dg);
    }
}

Solving it in format is the wrong answer, IMO.

--

Reply via email to