/*
TEST_OUTPUT:
---
fail_compilation/diag13884.d(14): Error: functions cannot return a tuple
fail_compilation/diag13884.d(21):        instantiated from here: `MapResult!((t) => t.tupleof, Foo[])`
fail_compilation/diag13884.d(14):        instantiated from here: `map!(Foo[])`
---
*/

struct Foo { int x; }

void main()
{
    [Foo(1)].map!(t => t.tupleof);
}

template map(fun...)
{
    auto map(Range)(Range r)
    {
        return MapResult!(fun, Range)(r);
    }
}

struct MapResult(alias fun, R)
{
    R _input;

    @property auto ref front()
    {
        return fun(_input[0]);
    }

}
