164 D3 d3 (oo.get<D3>() );
165 CHECK (3 == oo->getIt());
166 CHECK (!isSameObject (d3, *oo));
172 CHECK (5 == oo->getIt());
176 D5 &rd5 (oo.get<D5>());
177 CHECK (isSameObject (rd5, *oo));
181 CHECK (7 == oo->getIt());
184 CHECK (7 == rd5.getIt());
185 CHECK (isSameObject (rd5, *oo));
187 uint cnt_before = _create_count;
193 CHECK (5 == oo->getIt());
194 CHECK (_create_count == 2 + cnt_before);
199 cnt_before = _create_count;
202 CHECK (_create_count == cnt_before);
204 CHECK (_create_count == cnt_before);
206 CHECK (_create_count == cnt_before);
222 CHECK (!isSameObject (d3, *o2));
223 CHECK (3 == o2->getIt());
225 CHECK (
sizeof(
Opaque) <=
sizeof(Base) +
sizeof(
void*) + _ALIGN_);
243 typedef OpaqueHolder<Base,
sizeof(Special)> SpecialOpaque;
245 cout << showSizeof<Base>() << endl;
246 cout << showSizeof<Special>() << endl;
247 cout << showSizeof<Opaque>() << endl;
248 cout << showSizeof<SpecialOpaque>() << endl;
250 CHECK (
sizeof(Special) >
sizeof(Base));
251 CHECK (
sizeof(SpecialOpaque) >
sizeof(
Opaque));
252 CHECK (
sizeof(SpecialOpaque) <=
sizeof(Special) +
sizeof(
void*) + _ALIGN_);
258 CHECK (7 == s1.getIt());
259 CHECK (7 == s2.getIt());
262 SpecialOpaque ospe1 (s1);
263 SpecialOpaque ospe2 (s2);
268 CHECK ( isnil(ospe0));
269 CHECK (!isnil(ospe1));
270 CHECK (!isnil(ospe2));
272 CHECK (7 == ospe1->getIt());
273 CHECK (6 == ospe1.get<Special>().myVal_);
274 CHECK (3 == ospe2.get<Special>().myVal_);
278 CHECK (5 == ospe1->getIt());
283 CHECK (5 == normal->getIt());