The standard says:
1.3.24 [defns.undefined] undefined behavior>
Formally, anything which the standard doesn't define is undefined behavior. How is it defined, if the standard doesn't define it?
Practically, there are a couple of things which are taken as
given; if the standard defines a behavior, for example, an
implementation cannot add additional observable behavior. (I.e.
in a statement like a = 2 * a;
, an implementation isn't
allowed to modify anything but a
, even though I don't think
you'll find an explicit passage to this effect in the standard.)
But that's about it. If the standard doesn't define it, it's undefined behavior according to the standard. (An implementation may provide further definitions. In fact, all do.)