在 GCC 4.8 中包含 <random> 是必要的吗?

Was including <random> necessary in GCC 4.8?

继承了一个2014年写的C++项目,确实用GCC 4.8编译。在一个特定的文件中,实例化了当前在C++标准库<random> header中找到的几个类。这些包括 mt19937random_deviceuniform_real_distributionnormal_distribution

当我用 GCC 7.3 编译这个文件时,我得到一个错误,指出这些 类 没有在 std 命名空间中定义。当我包含 <random>.

时,这个错误(显然)消失了

我的问题是为什么这个错误不会在 GCC 4.8 中发生?这些 类 以前是在另一个 header 下找到的吗?

Standard headers may include other headers。当他们共享一个实现时,这会很有用。然而,这些事情会随着时间而改变,例如当公共部分被重构为第三个(内部)头文件时。

由于我们不确切知道 <random> 是如何间接包含在 GCC4.8 中的,因此我们不能对发生的事情绝对肯定,但这并不奇怪。