Tá certo, está retornando um índice.
Uma dica… o melhor é substituir macros por funções. Macros são substituição de texto. Elas não aparecem em erros de compilação, em call stacks, e elas podem gerar code bloat. Se for realmente necessário que a função trabalhe como uma macro, faça ela inline.
Macros também tem o problema de serem substituição de texto. Por exemplo, vamos pegar uma macro simples:
#define max(a,b) a > b ? a : b;
Isso aí aparentemente funciona, certo? Mas veja o que acontece se fizermos:
int x = max(a++, b);
O código fica substituido por:
int x = a++ > b ? a++ : b;
Percebeu uma soma de a duas vezes?
No C e no C++, 80% do código é organização e segurança no que você está fazendo. Se você começar a fazer as coisas sem entender EXATAMENTE o que está acontecendo, logo vai recair em memory leaks, dangling pointers e outras coisas tenebrosas.