Originally Posted by
CornedBee
Which part of "does nothing" was too hard to understand? A default-initialized POD has an unspecified value. Reading it invokes undefined behaviour.
The subtlety here comes not from what the default constructor does, but from when a POD is default-constructed, and when it is value-initialized. Value-initialization of PODs leads to zero-initialization.
T t;
Default-constructs t. If it's a POD, the value is unspecified.
T t = T();
Default-constructs a T, and copies it to t. If T is a POD, this default-construction leads to value-initialization.