/*
TEST_OUTPUT:
---
fail_compilation/fail9537.d(26): Error: `foo(tuple(1, 2))` is not an lvalue and cannot be modified
---
*/
struct Tuple(T...)
{
    T field;
    alias field this;
}
Tuple!T tuple(T...)(T args)
{
    return Tuple!T(args);
}
auto ref foo(T)(auto ref T t)
{
    return t[0];    // t[0] is deduced to non-ref
}
void main()
{
    int* p = &foo(tuple(1, 2));
}