Taken from: What is the underlying type of a c++ enum?, An older C++ standard stated at 7.2/5:
The underlying type of an enumeration is an integral type that can
represent all the enumerator values defined in the enumeration. It is
implementation-defined which integral type is used as the underlying
type for an enumeration except that the underlying type shall not be
larger than int unless the value of an enu- merator 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.
The value of sizeof() applied to an enu- meration type, an object of
enumeration type, or an enumerator, is the value of sizeof() applied
to the underlying type.
From draft n4606
the closest I could find is 7.2/7 + 8 which states:
7) 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.
8) For an enumeration whose underlying type is fixed, the values of the enumeration are the
values of the underlying type. Otherwise, for an enumeration where
emin is the smallest enumerator and emax is the largest, the values of
the enumeration are the values in the range bmin to bmax, defined as
follows: Let K be 1 for a two’s complement representation and 0 for a
ones’ complement or sign-magnitude representation. bmax is the
smallest value greater than or equal to max(|emin| − K, |emax|) and
equal to 2M − 1, where M is a non-negative integer. bmin is zero if
emin is non-negative and −(bmax + K) otherwise. The size of the
smallest bit-field large enough to hold all the values of the
enumeration type is max(M, 1) if bmin is zero and M + 1 otherwise. It
is possible to define an enumeration that has values not defined by
any of its enumerators. If the enumerator-list is empty, the values of
the enumeration are as if the enumeration had a single enumerator with
value 0
On the one hand it seems close enough, on the other hand, the specific demand for the sizeof()
operator was removed.
Still I think it is safe enough to state that answer for both the questions is yes.