39 lines
668 B
D
39 lines
668 B
D
// REQUIRED_ARGS: -dip25
|
|
|
|
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);
|
|
}
|