// REQUIRED_ARGS:

template indexOfReturn(T...)
{
    static if (T.length == 0)
    {
        enum indexOfReturn = -1;
    }
    else static if (T[$ - 1] == "return")
    {
        enum indexOfReturn = T.length - 1;
    }
    else
    {
        enum indexOfReturn = indexOfReturn!(T[0..$-1]);
    }
}

struct Test
{
    int n;

    ref int getN() return
    {
        return n;
    }

    int getNNonReturn()
    {
        return n;
    }
}

void main()
{
    assert(indexOfReturn!(__traits(getFunctionAttributes, Test.getN)) != -1);
    assert(indexOfReturn!(__traits(getFunctionAttributes, Test.getNNonReturn)) == -1);
}
