Здравствуйте, lpd, Вы писали:
lpd>Скомпилировал clang++ в linux и запустил этот код и получил undefined behaviour:
lpd>lpd>140353170302720 constructor: hello world
lpd>140353170302720 print: hello world
lpd>140353170302720 move constructor: hello world
lpd>140353170302720 move constructor: hello world
lpd>140353170302720 destructor:
lpd>140353170302720 destructor:
lpd>terminate called after throwing an instance of 'std::system_error'
lpd> what(): Invalid argument
lpd>Aborted (core dumped)
А, у тебя линух, понятно. Ну замени там первый second.join(); на какой-нибудь банальный this_thread::sleep_for(1s); и всё заработает. Это не имеет отношения к обсуждаемому нами вопросу, а связано с ожиданием завершения потока из двух других в pthread. В общем это тема отдельной дискуссии на тему синхронизации, можем тоже обсудить, если захочешь, но к вопросу передачи "локального" объекта между потоками это никакого отношения не имеет. )