2的最小功率大于或等于给定值

时间:2017-07-17 03:23:02

标签: c++ algorithm templates

我希望它与类模板一起使用,因此必须折叠为常量值。 我知道,已经有一些答案,但我无法编译。例如,如果我在代码中使用它,我会遇到很多编译器错误(我使用的是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'正在编译

  

0 个答案:

没有答案