/*
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]);
    }
}