Если функция, возвращающая ссылку на статическую переменную, окажется явно или неявно рекурсивной, мало не будет.
Теперь модно говорить о потоках, но не след забывать, что проблема — это нереентерабельность такого кода, независимо от причины повторного вхождения.
Кроме того, существуют неприятности, связанные с использованием результата: например, нельзя одновременно использовать два результата такой функции
Код:
int& foo(int x);
int& u = foo(1);
int& v = foo(2);
print(u, v);
Пакость здесь в том, что не читая код foo(), понять источник проблем невозможно.
Кажется искусственным? Любому, кто имел дело со strtok() в С, не кажется: что может быть естественнее, чем разбить на строки по \n, а потом на поля по \t? Низяа: вложенный цикл убьёт strtok() во внешнем.