Я унаследовал проект C ++, который был написан в 2014 году и действительно компилируется с GCC 4.8. В определенном файле несколько классов в настоящее время находятся в <random>
создаются заголовки стандартной библиотеки C ++. Они включают mt19937
, random_device
, uniform_real_distribution
, а также normal_distribution
,
Когда я компилирую этот файл с GCC 7.3, я получаю сообщение об ошибке, говорящее, что эти классы не определены в std
Пространство имен. Эта ошибка (очевидно) исчезает, когда я включаю <random>
,
У меня вопрос, почему эта ошибка не происходит в GCC 4.8? Были ли эти классы ранее найдены под другим заголовком?
Стандартные заголовки могут включать другие заголовки. Это может быть полезно, когда они совместно используют реализацию. Однако эти вещи могут меняться со временем, например, когда общие части преобразуются в третий (внутренний) заголовочный файл.
Так как мы не знаем точно, как <random>
косвенно включенный в GCC4.8, мы не можем быть абсолютно уверенными в том, что произошло, но это не удивительно.
Других решений пока нет …