Я нашел странные макросы в реализации драйвера, которые я не могу объяснить себе. Упрощенный пример:
cout << ({int i=0; while(i<10) {++i;} i;}) << endl;
Он выведет 10.
Но почему это выражение вообще становится rvalue? Кажется, он работает в C и на С++.
Может кто-нибудь объяснить мне? Указывать на ключевые слова и ссылаться будет отлично.