Почему Metal компилирует эту рекурсивную функцию? - PullRequest
1 голос
/ 12 февраля 2020

Металл spe c говорит, что рекурсивные функции недопустимы. Однако это прекрасно скомпилируется:

int b(int c) {
  if (c == 1)
    return b(c++);
  else if (c == 2)
    return b(c + 2);
  else
    return c;
}

Почему это так? Какое определение рекурсива использует Metal? Это относится к разделу 5.2.2 C ++ 14 spe c, который также не дает какого-либо определения «рекурсивный», поэтому я ожидаю, что вышеприведенное будет стандартным примером рекурсии.

Даже если я сделаю это, он все равно скомпилирует:

int b(int c) {
    return b(c + 2);
}

Что дает?!

1 Ответ

1 голос
/ 12 февраля 2020

Функция может прекрасно компилироваться как любая функция C ++, нет проблем. Когда вы вызываете функцию из ядра, вы получаете ошибку компиляции об использовании рекурсивной функции.

...