// https://issues.dlang.org/show_bug.cgi?id=22420
struct File
{
    ~this()
    {
    }
    File impl()
    {
        return File.init;
    }
    alias impl this;
}
struct Variable
{
    this(File)(File) { }
    this(File)(File[]) { }
}
Variable wrapFunctionReturn(alias handler)(Variable params)
{
    return Variable(handler(params));
}
void registerFile()
{
    wrapFunctionReturn!((Variable) {
            return File.init;
        })(Variable.init);
}
// Reduction from an 'automem' test
struct Issue156 {}
void test2()
{
    RefCounted!Issue156 s;
    auto r1 = repeat(s);
    zip(r1);
}
struct RefCounted(RefCountedType)
{
    ~this() {}
    alias _impl this;
    struct Impl {}
    alias ImplType = Impl;
    private ImplType* _impl;
}
template Tuple(Specs)
{
    struct Tuple
    {
        this(U)(U) {}
        this()(int) {}
    }
}
template ElementType(R)
{
    static if (is(typeof(R.init) T))
        alias ElementType = T;
}
struct Repeat(T)
{
    inout(T) front() inout {assert(0);}
}
Repeat!T repeat(T)(T ) {assert(0);}
auto zip(Ranges)(Ranges )
{
    return ZipShortest!Ranges();
}
struct ZipShortest(Ranges...)
{
    Ranges ranges;
    alias ElementType = Tuple!(.ElementType!(Ranges[0]));
    ElementType front()
    {
        return typeof(return)(ranges[0].front);
    }
}