Yes, that guarantee holds true. Quoting the C++11 standard, §20.3.2/2-3:
constexpr pair();2 Requires:
is_default_constructible<first_type>::valueistrueandis_default_constructible<second_type>::valueistrue.
3 Effects: Value-initializesfirstandsecond.
And §8.5/7:
To value-initialize an object of type
Tmeans:
- if
Tis a (possibly cv-qualified) class type with a user-provided constructor, then the default constructor forTis called (and the initialization is ill-formed ifThas no accessible default constructor);- if
Tis a (possibly cv-qualified) non-union class type without a user-provided constructor, then the object is zero-initialized and, ifT‘s implicitly-declared default constructor is non-trivial, that constructor is called.- if
Tis an array type, then each element is value-initialized;- otherwise, the object is zero-initialized.
And lastly, §8.5/5:
To zero-initialize an object or reference of type
Tmeans:
- if
Tis a scalar type, the object is set to the value0(zero), taken as an integral constant expression, converted toT;- if
Tis a (possibly cv-qualified) non-union class type, each non-static data member and each base-class subobject is zero-initialized and padding is initialized to zero bits;- if
Tis a (possibly cv-qualified) union type, the object’s first non-static named data member is zero-initialized and padding is initialized to zero bits;- if
Tis an array type, each element is zero-initialized;- if
Tis a reference type, no initialization is performed.