#include <boost/optional.hpp>
#include <boost/logic/tribool.hpp>
#include <iostream>
void foo(boost::optional<bool> opb){
if(!opb)
std::cout << "none" << std::endl;
else if(*opb)
std::cout << "true" << std::endl;
else
std::cout << "false" << std::endl;
}
void bar(boost::logic::tribool trb){
if(trb)
std::cout << "true" << std::endl;
else if(!trb)
std::cout << "false" << std::endl;
else
std::cout << "indeterminate" << std::endl;
}
int main(){
// optional<bool> a: 未初期化, b: true, c: false
boost::optional<bool> a, b = true, c = false, d = boost::none;
// tribool v: 未初期化, x: true, y: false, z: indeterminate
boost::logic::tribool v, x = true, y = false, z = boost::logic::indeterminate;
std::cout << "a: ";
foo(a);
std::cout << "b: ";
foo(b);
std::cout << "c: ";
foo(c);
std::cout << "d: ";
foo(d);
std::cout << std::endl;
std::cout << "v: ";
bar(v);
std::cout << "x: ";
bar(x);
std::cout << "y: ";
bar(y);
std::cout << "z: ";
bar(z);
return 0;
}
I2luY2x1ZGUgPGJvb3N0L29wdGlvbmFsLmhwcD4KI2luY2x1ZGUgPGJvb3N0L2xvZ2ljL3RyaWJvb2wuaHBwPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp2b2lkIGZvbyhib29zdDo6b3B0aW9uYWw8Ym9vbD4gb3BiKXsKCiAgaWYoIW9wYikKICAgIHN0ZDo6Y291dCA8PCAibm9uZSIgPDwgc3RkOjplbmRsOwogIGVsc2UgaWYoKm9wYikKICAgIHN0ZDo6Y291dCA8PCAidHJ1ZSIgPDwgc3RkOjplbmRsOwogIGVsc2UKICAgIHN0ZDo6Y291dCA8PCAiZmFsc2UiIDw8IHN0ZDo6ZW5kbDsKCn0KCnZvaWQgYmFyKGJvb3N0Ojpsb2dpYzo6dHJpYm9vbCB0cmIpewoKICBpZih0cmIpCiAgICBzdGQ6OmNvdXQgPDwgInRydWUiICA8PCBzdGQ6OmVuZGw7CiAgZWxzZSBpZighdHJiKQogICAgc3RkOjpjb3V0IDw8ICJmYWxzZSIgPDwgc3RkOjplbmRsOwogIGVsc2UKICAgIHN0ZDo6Y291dCA8PCAiaW5kZXRlcm1pbmF0ZSIgPDwgc3RkOjplbmRsOwoKfQoKaW50IG1haW4oKXsKICAvLyBvcHRpb25hbDxib29sPiBhOiDmnKrliJ3mnJ/ljJYsIGI6IHRydWUsIGM6IGZhbHNlCiAgYm9vc3Q6Om9wdGlvbmFsPGJvb2w+IGEsIGIgPSB0cnVlLCBjID0gZmFsc2UsIGQgPSBib29zdDo6bm9uZTsKICAKICAvLyB0cmlib29sIHY6IOacquWIneacn+WMliwgeDogdHJ1ZSwgeTogZmFsc2UsIHo6IGluZGV0ZXJtaW5hdGUKICBib29zdDo6bG9naWM6OnRyaWJvb2wgdiwgeCA9IHRydWUsIHkgPSBmYWxzZSwgeiA9IGJvb3N0Ojpsb2dpYzo6aW5kZXRlcm1pbmF0ZTsKICAKICBzdGQ6OmNvdXQgPDwgImE6ICI7CiAgZm9vKGEpOwogIAogIHN0ZDo6Y291dCA8PCAiYjogIjsKICBmb28oYik7CiAgCiAgc3RkOjpjb3V0IDw8ICJjOiAiOwogIGZvbyhjKTsKICAKICBzdGQ6OmNvdXQgPDwgImQ6ICI7CiAgZm9vKGQpOwogIAogIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgCiAgc3RkOjpjb3V0IDw8ICJ2OiAiOwogIGJhcih2KTsKICAKICBzdGQ6OmNvdXQgPDwgIng6ICI7CiAgYmFyKHgpOwogIAogIHN0ZDo6Y291dCA8PCAieTogIjsKICBiYXIoeSk7CiAgCiAgc3RkOjpjb3V0IDw8ICJ6OiAiOwogIGJhcih6KTsKICAKICByZXR1cm4gMDsKfQ==