我希望它与类模板一起使用,因此必须折叠为常量值。 我知道,已经有一些答案,但我无法编译。例如,如果我在代码中使用它,我会遇到很多编译器错误(我使用的是VS 2013):
template<typename T,typename = typename std::enable_if<std::is_integral<T>::value>::type,typename = typename std::enable_if<std::is_unsigned<T>::value>::type>
T roundup(T value, unsigned maxb = sizeof(T)*CHAR_BIT, unsigned curb = 1){
return maxb <= curb ? value : roundup(((value - 1) | ((value - 1) >> curb)) + 1, maxb, curb << 1);
}
template <typename T>
union TEntry
{
char m[roundup(sizeof(T))];//data
TDeadPtr<T> iNextDead;
T* data(){ return (T*)&m; }
};
致命错误C1001:编译器中发生内部错误。 3 GT; (编译文件'f:\ dd \ vctools \ compiler \ cxxfe \ sl \ p1 \ c \ trees.h',行 807)3&gt;要解决此问题,请尝试简化或更改 程序靠近上面列出的位置。 3 GT;请选择 Visual C ++ 3上的技术支持命令&gt;帮助菜单,或打开 技术支持帮助文件以获取更多信息 (.... \ dc \ branch.cpp)3&gt;
.h(443):参考 类模板实例化'mem :: TEntry'正在编译