/*!
\page oess_1_2_0__reenterability oess_1.2.0. Реентерабильность вспомогательного кода

До версии 1.2.0 вспомогательный код по сериализации объектов не был
реентерабильным. Объяснялось это тем, что в случае использования
виртуального множественного наследования нужно было защищатся от
того, что одна базовая составляющая может быть использована для
сериализации более одного раза. Например, в следующем случае:
\verbatim
{type	A
	{attr	m_a {of std::string}}
}

{type	B
	{super {virtual} A}

	{attr	m_b {of std::string}}
}

{type	C
	{super {virtual} A}

	{attr	m_c {of std::string}}
}

{type	D
	{attr	m_d {of std::string}}
}

{type	E
	{super D}
	{super {virtual} B}
	{super {virtual} C}

	{attr	m_e {of std::string}}
}
\endverbatim

При сериализации типа E, сериализация его базовой составляющей из
типа A инициировалась через E::B::A и E::C::A.

Для того чтобы виртуальная базовая составляющая сериализовалась только
один раз, в каждом сериализуемом типе хранился специальный флаг,
который использовался для указания того, что составляющая данного типа
уже была сериализована.

Из-за того, что данный флаг хранился в самом сериализуемом объекте,
вспомогательный код сериализации оказывался нереентерабильным.

Для преодоления этой проблемы в v.1.2.0 изменена структура вспомогательного
кода. Теперь никаких флагов в сериализуемых объектах не хранится. Контроль
повторной сериализации осуществляется на уровне классов
oess_1::stdsn::oent_t.

Реентерабильность вспомогательного кода дает возможность параллельной
сериализации одного и того же объекта на разных нитях.

\note ObjESSty гарантирует реентерабильность только вспомогательного
	кода, который осуществляет сериализацию. Но ObjESSty не может
	гарантировать реентерабильности всей операции сериализации, если
	программист перекрыл операции oess_1::stdsn::serializable_t::oess_pre_pack()
	и oess_1::stdsn::serializable_t::oess_post_pack() и реализовал в них
	нереентерабильный код.

*/

