Я просмотрел эту страницу, но я не могу понять причину этого. Там упоминается, что
"более разумно, чтобы он не возвращал никакой ценности и требовал клиентам использовать front() для проверки значения в передней части очереди"
Но для проверки элемента из front() также требуется, чтобы этот элемент был скопирован в lvalue. Например, в этом сегменте кода
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/* здесь будет временно создан RHS, который будет присвоен результату, а в случае если возвращает по ссылке, тогда результат будет отображаться недействительным после поп-операции */
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
в пятой строке cout-объекта сначала создается копия myqueue.front(), затем присваивает результат. Итак, какая разница, функция pop могла бы сделать то же самое.