// https://issues.dlang.org/show_bug.cgi?id=23351
enum strings =
[
"a[(b).",
"[(a)(b).",
"a(={@.()(",
"a[b,[(c).",
"a[b#([(c).",
"[a@b[(c).",
"[((a).",
"[a)b[(c).",
"a[b)[(c).",
"a(b[(c).",
"a[b()c[(d).",
"a[(b[(c).",
"a(b[(c).",
"[(@@a b[(c).",
"a[(!b)c[(d).",
"[(^a)b[(c).",
"a(b[(c).",
"~[a.b[(c).",
"[a).[(b c d(e[(f).",
"[((a).",
"[a}b[(c).",
"a[b[c..(d).",
"[1a.[(b).",
"a[({in){,",
"a[^in(b[c=])S....,",
"a[({in[({)){,"
];
template KidNamedFinger(T)
{
}
void dummy()
{
    static foreach(str; strings)
    {
        /*
            The above strings are all gibberish, they should
            fail to parse but not segfault the compiler.
        */
        {
            enum exp = __traits(compiles, mixin(str));
            static assert(!exp);
            enum t = __traits(compiles, KidNamedFinger!(mixin(str)));
            static assert(!t);
        }
    }
}