Я попробовал несколько компиляторов и несколько стандартных версий C ++. Этот код может иметь тупик (комментарии указывают на то, что это UB) и может быть воспроизведен, по крайней мере, в GCC8 и C ++ 11. Я использую «Компиляторский проводник», чтобы проверить сборку этого кода. И я обнаружил, что аргумент q функции foo1 не отброшен до тех пор, пока оператор вызывающего в Main ends.
https://godbolt.org/z/vaes53z44,#include
#include
#include
std::mutex mtx;
int foo1(std::unique_lock q) {
std::cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... unction-re
Мобильная версия