#include <iostream>
#include <bitset>
#include <vector>

template <size_t SIZE>
bool operator > (const std::bitset<SIZE> & bs1, const std::bitset<SIZE> & bs2){
    return(bs1.to_ulong() > bs2.to_ulong());
}
template <size_t SIZE>
bool operator >=(const std::bitset<SIZE> & bs1, const std::bitset<SIZE> & bs2){
    return(bs1.to_ulong() >= bs2.to_ulong());
}
template <size_t SIZE>
bool operator < (const std::bitset<SIZE> & bs1, const std::bitset<SIZE> & bs2){
    return(bs1.to_ulong() < bs2.to_ulong());
}
template <size_t SIZE>
bool operator <=(const std::bitset<SIZE> & bs1, const std::bitset<SIZE> & bs2){
    return(bs1.to_ulong() <= bs2.to_ulong());
}

using namespace std;
int main(void){
    vector< bitset<5> > x, y;
    x.push_back(bitset<5>(0b11011));
    x.push_back(bitset<5>(0b00011));
    x.push_back(bitset<5>(0b01110));
    
    y.push_back(bitset<5>(0b11001));
    y.push_back(bitset<5>(0b11001));
    y.push_back(bitset<5>(0b11111));
    
    cout << (x[0] > y[0]) << endl; // ここは普通にOKなんだけど…
    cout << (x > y) << endl; // ここが何故かコンパイルエラー
}