For scoped enums, the relevant part excerpted from C++14, [decl.enum]:
For an enumeration whose underlying type is not fixed, the underlying type is an integral type that can represent all the enumerator values defined in the enumeration. If no integral type can represent all the enumerator values, the enumeration is ill-formed. It is implementation-defined which integral type is used as the underlying type except that the underlying type shall not be larger than int unless the value of an enumerator cannot fit in an int or unsigned int. If the enumerator-list is empty, the underlying type is as if the enumeration had a single enumerator with value 0.
So if enumerated states are representable in an int then it is guaranteed to be ≤ sizeof(int), greater if not. Of course, if you've explicitly specified the underlying type, then you know know its size.
cout << sizeof( yin_yang ) << endl;sizeof(yin_yang)has to be at least one, that is size of acharand acharhas to be more than a bit..char(which may contain an arbitrary number of bits, but at least eight). Data smaller than a char either contains padding (e.g. abool) or shares a storage location with other data (e.g. a bitfield).