Isn't the IID before the actual move loop (where alpha gets modified) to get the probably best move to the top of the list?
Though, after looking again, I see that I do need the start_alpha: for maintaining the hash tables once the node's move loop is over. That's different depending on whether any move has improved alpha or not.
I'm passing the move list by reference to the recursive function, and the best move index also as reference. This move list may be either filled for "early" move generation (such as root and check evasions), or empty for "late" and for "even later" move generation. The best move index is initialised to -1, and if it's still at -1 afterwards, this means that no best move was found. Either because all moves failed low, or because the position doesn't have legal moves.
Now the trick is that the recursive function itself declares a move list and a best move index, which is what it hands over to the next recursion level.
