【发布时间】:2017-08-26 02:54:26
【问题描述】:
template <uint_fast64_t MAX_RAND>
struct RandomLimit
{
static const uint_fast64_t steps =
RAND_MAX >= MAX_RAND ?
1 :
RandomLimit<MAX_RAND / (RAND_MAX + 1)>::steps + 1;
};
上面的代码产生和错误;步骤未定义。在运行时,如果函数调用代替最后一个表达式,则不会调用该函数,也不会发生副作用。为什么当条件成立时这段代码没有被消除?
请注意,RAND_MAX 是 cstdlib 常量,我使用的是 Visual Studio 2015 设置。
【问题讨论】:
-
不。编译正确,无法重现问题
-
您是否尝试过实例化模板? ideone.com/HONYBI
-
minimal reproducible example -- 提供生成错误的准确代码,以及生成的准确和完整错误。
标签: c++ c++11 templates metaprogramming ternary-operator