Да, порядок строительства всегда гарантирован. Однако не гарантируется, что он будет таким же, как порядок, в котором объекты появляются в списке инициализатора.
Переменные-члены создаются в том порядке, в котором они объявлены в теле класса. Например:
struct A { };
struct B { };
struct S {
A a;
B b;
S() : b(), a() { }
};
Сначала строится
a
, затем b
. Порядок, в котором переменные-члены появляются в списке инициализатора, не имеет значения.