Is this cheating?

Code:

#include <iostream>
#include <bitset>
using namespace std;
class DivisionByZeroError {};
template <size_t bit_len> inline bitset<bit_len> operator/(const bitset<bit_len>& numerator, const bitset<bit_len>& denominator)
{
if (denominator.none())
{
throw DivisionByZeroError();
}
return numerator.to_ulong()/denominator.to_ulong();
}
int main(int, char**)
{
static const unsigned MAX_BIT_LEN = 16;
bitset<MAX_BIT_LEN> b1 = 32;
bitset<MAX_BIT_LEN> b2 = 4;
cout << b1 << "/" << b2 << " = " << b1 / b2;
return 0;
}