#include <iostream>
using namespace std;
enum Color {red, blue};
enum Number {three=3, four};
enum Shape {circle, square};
struct article
{
enum Color color;
enum Number number;
enum Shape shape;
} article_1;
//assume I have the below for all three enums
std::istream& operator>>( std::istream& is, Color& I )
{
std::string tmp;
if ( is >> tmp ) {
for (auto&c:tmp)
c=tolower(c);
if (tmp=="red") I = red;
else if (tmp=="blue") I = blue;
}
return is ;
}
std::ostream& operator<<( std::ostream& os, Color& O )
{
std::string tmp;
switch (O) {
case red: tmp="red"; break;
case blue: tmp="blue"; break;
default: tmp="oops!!";
}
return os<<tmp ;
}
int main ()
{
cout<<"Enter the Color : ";
cin>>article_1.color;
cout << "Result: "<<article_1.color<<endl;
// -------------------------- Comparison
if (article_1.color==red)
cout<<"Bingo!"<<endl;
if (article_1.color!=blue)
cout<<"Bingo again!"<<endl;
if (article_1.color!=Color::blue)
cout<<"Yet another Bingo!"<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZW51bSBDb2xvciB7cmVkLCBibHVlfTsKZW51bSBOdW1iZXIge3RocmVlPTMsIGZvdXJ9OwplbnVtIFNoYXBlIHtjaXJjbGUsIHNxdWFyZX07CgpzdHJ1Y3QgYXJ0aWNsZSAKewogICAgZW51bSBDb2xvciBjb2xvcjsKICAgIGVudW0gTnVtYmVyIG51bWJlcjsKICAgIGVudW0gU2hhcGUgc2hhcGU7Cn0gYXJ0aWNsZV8xOwoKLy9hc3N1bWUgSSBoYXZlIHRoZSBiZWxvdyBmb3IgYWxsIHRocmVlIGVudW1zCnN0ZDo6aXN0cmVhbSYgb3BlcmF0b3I+Piggc3RkOjppc3RyZWFtJiBpcywgQ29sb3ImIEkgKSAKewogICAgc3RkOjpzdHJpbmcgdG1wOwogICAgaWYgKCBpcyA+PiB0bXAgKSB7CiAgICAJZm9yIChhdXRvJmM6dG1wKQogICAgICAgIAljPXRvbG93ZXIoYyk7ICAKCQlpZiAodG1wPT0icmVkIikgSSA9IHJlZDsgCgkJZWxzZSBpZiAodG1wPT0iYmx1ZSIpIEkgPSBibHVlOyAgIAogICAgfQogICAgcmV0dXJuIGlzIDsKfQpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoIHN0ZDo6b3N0cmVhbSYgb3MsIENvbG9yJiBPICkgCnsKCXN0ZDo6c3RyaW5nIHRtcDsgCglzd2l0Y2ggKE8pIHsKCQljYXNlIHJlZDogIHRtcD0icmVkIjsgYnJlYWs7IAoJCWNhc2UgYmx1ZTogdG1wPSJibHVlIjsgYnJlYWs7IAoJCWRlZmF1bHQ6ICAgdG1wPSJvb3BzISEiOwoJfQogICAgcmV0dXJuIG9zPDx0bXAgOwp9CgoKaW50IG1haW4gKCkKewogICAgY291dDw8IkVudGVyIHRoZSBDb2xvciA6ICI7CiAgICBjaW4+PmFydGljbGVfMS5jb2xvcjsKCWNvdXQgPDwgIlJlc3VsdDogIjw8YXJ0aWNsZV8xLmNvbG9yPDxlbmRsOyAKCQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29tcGFyaXNvbgoJaWYgKGFydGljbGVfMS5jb2xvcj09cmVkKQoJICAgIGNvdXQ8PCJCaW5nbyEiPDxlbmRsOyAKCWlmICAoYXJ0aWNsZV8xLmNvbG9yIT1ibHVlKQoJICAgIGNvdXQ8PCJCaW5nbyBhZ2FpbiEiPDxlbmRsOyAKCWlmICAoYXJ0aWNsZV8xLmNvbG9yIT1Db2xvcjo6Ymx1ZSkKCSAgICBjb3V0PDwiWWV0IGFub3RoZXIgQmluZ28hIjw8ZW5kbDsgCgkKCiAgICAgcmV0dXJuIDA7Cn0=