#include <iostream>
#include "boost/optional.hpp"
using namespace std;
struct No_data{
operator bool() const{
return false;
}
};
template<typename T>
struct Data {
T t;
operator bool() const {
return true;
}
};
template<typename T>
struct myOptional {
union {
Data<T> t;
No_data nd;
} data;
};
int main(){
myOptional<bool> ob;
cout << sizeof(myOptional<bool>) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSAiYm9vc3Qvb3B0aW9uYWwuaHBwIgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5vX2RhdGF7CglvcGVyYXRvciBib29sKCkgY29uc3R7CgkJcmV0dXJuIGZhbHNlOwoJfQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IERhdGEgewoJVCB0OwoJb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsKCQlyZXR1cm4gdHJ1ZTsKCX0KfTsKCQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IG15T3B0aW9uYWwgewoJdW5pb24gewoJCURhdGE8VD4gdDsKCQlOb19kYXRhIG5kOwoJfSBkYXRhOwp9OwppbnQgbWFpbigpewoJbXlPcHRpb25hbDxib29sPiBvYjsKCWNvdXQgPDwgc2l6ZW9mKG15T3B0aW9uYWw8Ym9vbD4pIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==