Given the issues encountered, i'd be reassured if we had tests that were a bit more thourough, and also tested the oposite:
```D
    foreach(S; TypeTuple!(char, wchar, dchar, const(char[]), const(wchar[]), const(dchar[])))
    {
        auto s1 = to!S(E.foo);
        auto s2 = to!S(E.foo);
        assert(s1 == s2);
        assert(s1  is s2);
    }
    foreach(S; TypeTuple!(char[], wchar[], dchar[]))
    {
        auto s1 = to!S(E.foo);
        auto s2 = to!S(E.foo);
        assert(s1 == s2);
        assert(s1 !is s2);
    }
```

Also, simple array `is` is enough, no need for `.ptr`.