考虑以下代码
template<unsigned int N> void foo(std::bitset<N> bs)
{ /* whatever */ }
int main()
{
bitset<8> bar;
foo(bar);
return 0;
}
g++ 在 64 位上抱怨这一点,因为 <8> 被解释为无符号长整数,它与模板不完全匹配。如果我将模板更改为 unsigned long int,则 32 位编译会抱怨。
显然,解决此问题的一种方法是将 bitset<8> 更改为 bitset<8ul>,但是有没有办法重新编写模板部分,以便它可以与数字文字的默认解释一起使用?