Было ли необходимо включить <random> в GCC 4.8?

Я унаследовал проект C++, который был написан в 2014 году и действительно компилируется с GCC 4.8. В определенном файле несколько классов в настоящее время находятся в <random> создаются заголовки стандартной библиотеки C++. Они включают mt19937, random_device, uniform_real_distribution, а также normal_distribution,

Когда я компилирую этот файл с GCC 7.3, я получаю сообщение об ошибке, говорящее, что эти классы не определены в std Пространство имен. Эта ошибка (очевидно) исчезает, когда я включаю <random>,

У меня вопрос, почему эта ошибка не происходит в GCC 4.8? Были ли эти классы ранее найдены под другим заголовком?

1 ответ

Решение

Стандартные заголовки могут включать другие заголовки. Это может быть полезно, когда они совместно используют реализацию. Однако эти вещи могут меняться со временем, например, когда общие части преобразуются в третий (внутренний) заголовочный файл.

Так как мы не знаем точно, как <random> косвенно включенный в GCC4.8, мы не можем быть абсолютно уверенными в том, что произошло, но это не удивительно.

Другие вопросы по тегам