qbt*_*937 17 c++ language-lawyer c++11
C++ 11标准(N3242)第26.5.1.1节第1段说:
在本子条款26.5中,实例化模板的效果:
[...]
f)一条命名模板类型参数
UIntType是未定义的,除非相应的模板参数是CV-不合格和是下列之一unsigned short,unsigned int,unsigned long,或unsigned long long.
它定义了26.5.3.1中的线性同余生成器.该类的定义如下所示:
template<class UIntType, UIntType a, UIntType c, UIntType m>
class linear_congruential_engine
Run Code Online (Sandbox Code Playgroud)
minstd_rand0 似乎违反了这个限制:
typedef linear_congruential_engine<uint_fast32_t, 16807, 0, 2147483647>
minstd_rand0;
Run Code Online (Sandbox Code Playgroud)
因为它使用uint_fast32_t(其不保证之一unsigned short,unsigned int,unsigned long,或unsigned long long)在minstd_rand0名为模板参数UIntType,它似乎有未定义的效果#include <random>,或至少使用minstd_rand0.此问题也适用于其他预定义的RNG,并且在C++ 14中似乎没有修复.
我的问题是:
编辑:我注意到这个缺陷报告似乎与这个问题有关.
我不是专家,但我的答案是,是的,这是一个缺陷,如果你是对的,uint_fast32_t根据标准,它不一定是这些类型之一。
您引用的 NAD 问题 2326 中的提案似乎也解决了此缺陷。
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |