Похоже, это проблема с дистрибутивом nuwen.
Обе версии 16.0 и 16.1 генерируют некое неопределенное поведение в конструкторе std :: random_device или во время генерации значения, что иногда приводит к сбою в автоматическом режиме, но трудно создать минималистический пример.
Сбои, похоже, исчезают, когда код компилируется с уровнем оптимизации больше 0.
Я бы не зависел от этого, так как, скорее всего, UB все еще где-то существует, и программа может аварийно завершить работу в самых неожиданных местах.
Версия 16.0 использует GCC 8.1.0, а 16.1 использует GCC 8.2.0.
Я не мог воспроизвести эту ошибку с MinGW, загруженным с https://sourceforge.net/projects/mingw-w64/,, который также использует версию 8.1.0.
Кроме того, учтите, что std :: random_device в MinGW не будет предоставлять случайные числа - он будет детерминированным, всегда давая одинаковые значения. К сожалению, стандарт позволяет это делать, что, на мой взгляд, является большой проблемой.
Если вам просто нужны разные значения при каждом прогоне, рассмотрите возможность заполнения из других, не случайных источников, таких как время из библиотеки C. Если вам действительно нужны недетерминированные значения, вы можете использовать boost :: random :: random_device (тот же интерфейс, что и в std :: random_device), предоставляемый с дистрибутивом nuwen. Это не только заголовок, поэтому вам нужно добавить дополнительную ссылку:
g ++ foo.cpp -lboost_random -lboost_system