#include <iostream>
#include <vector>
template<long long X>
class Bitset
{
private:
std::vector<unsigned char> bits = std::vector<unsigned char> ((X+7)/8);
public:
/* constructors */
class BitProxy
{
private:
unsigned char &bit;
public:
BitProxy(unsigned char &bit) : bit(bit) {}
BitProxy& operator=(unsigned char x) { bit = x; return *this; }
operator unsigned char() const { return bit; }
};
BitProxy operator[](size_t index) { return BitProxy(bits[index]); }
friend std::ostream& operator<< (std::ostream &output, const BitProxy &x)
{
output << static_cast<short>(static_cast<unsigned char>(x));
return output;
}
};
int main()
{
Bitset<1> a;
a[0] = 0xff;
std::cout << a[0] << std::endl;
std::cout << 'a' << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGU8bG9uZyBsb25nIFg+CmNsYXNzIEJpdHNldAp7CnByaXZhdGU6CiAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBiaXRzID0gc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gKChYKzcpLzgpOwoKcHVibGljOgogICAgLyogY29uc3RydWN0b3JzICovCgogICAgY2xhc3MgQml0UHJveHkKICAgIHsKICAgIHByaXZhdGU6CiAgICAgICAgdW5zaWduZWQgY2hhciAmYml0OwoKICAgIHB1YmxpYzoKICAgICAgICBCaXRQcm94eSh1bnNpZ25lZCBjaGFyICZiaXQpIDogYml0KGJpdCkge30KCiAgICAgICAgQml0UHJveHkmIG9wZXJhdG9yPSh1bnNpZ25lZCBjaGFyIHgpIHsgYml0ID0geDsgcmV0dXJuICp0aGlzOyB9CiAgICAgICAgb3BlcmF0b3IgdW5zaWduZWQgY2hhcigpIGNvbnN0IHsgcmV0dXJuIGJpdDsgfQogICAgfTsKCiAgICBCaXRQcm94eSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gQml0UHJveHkoYml0c1tpbmRleF0pOyB9CgogICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PCAoc3RkOjpvc3RyZWFtICZvdXRwdXQsIGNvbnN0IEJpdFByb3h5ICZ4KQoJewogICAgCW91dHB1dCA8PCBzdGF0aWNfY2FzdDxzaG9ydD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oeCkpOwoJICAgIHJldHVybiBvdXRwdXQ7Cgl9Cn07CgppbnQgbWFpbigpCnsKCUJpdHNldDwxPiBhOwoJYVswXSA9IDB4ZmY7CglzdGQ6OmNvdXQgPDwgYVswXSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgJ2EnIDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9