Just adding: I think your spacing is misleading. Maybe things get a bit clearer if you change it.
The , &, * and so on is part of the type, so keep it with the type:
void foo(int& x)
void foo(int* x)
void foo(int** x)
void foo(int*& x)
int& is an reference to an int, int* is a pointer to an int, int** is a pointer to an pointer to an int, and so on.
You still need to read the types from right to left - int*& being a reference to an pointer to an int. But that's consistent.
I think this is easier to read and represents better what is meant.