16#include "CLHEP/Utility/memory.h"
28#if defined(_MSC_VER) && (_MSC_VER >= 1310)
29# pragma warning (disable : 4675)
65 :
public X,
public virtual Y
112 assert(!(sp < sp2 || sp2 < sp));
121 assert(!(sp < sp2 || sp2 < sp));
134 assert(!(sp < sp2 || sp2 < sp));
143 assert(!(sp < sp2 || sp2 < sp));
162 assert(!(sp < sp2 || sp2 < sp));
173 assert(!(sp < sp2 || sp2 < sp));
195 assert(!(sp < sp2 || sp2 < sp));
204 assert(!(sp < sp2 || sp2 < sp));
216 assert(!(sp < sp2 || sp2 < sp));
226 assert(wp2.use_count() == wp.
use_count());
227 assert(wp2.use_count() == 0);
233 assert(wp2.use_count() == wp.
use_count());
234 assert(wp2.use_count() == 0);
240 assert(wp2.use_count() == wp.
use_count());
241 assert(wp2.use_count() == 0);
249 assert(wp2.use_count() == wp.use_count());
250 assert(wp2.use_count() == 1);
251 assert(!(wp < wp2 || wp2 < wp));
254 assert(!(wp < wp2 || wp2 < wp));
257 assert(wp3.use_count() == wp.use_count());
258 assert(wp3.use_count() == 0);
259 assert(!(wp < wp3 || wp3 < wp));
267 assert(wp2.use_count() == wp.use_count());
268 assert(wp2.use_count() == 1);
269 assert(!(wp < wp2 || wp2 < wp));
272 assert(!(wp < wp2 || wp2 < wp));
275 assert(wp3.use_count() == wp.use_count());
276 assert(wp3.use_count() == 0);
277 assert(!(wp < wp3 || wp3 < wp));
285 assert(wp2.use_count() == wp.use_count());
286 assert(wp2.use_count() == 1);
287 assert(!(wp < wp2 || wp2 < wp));
290 assert(!(wp < wp2 || wp2 < wp));
293 assert(wp3.use_count() == wp.use_count());
294 assert(wp3.use_count() == 0);
295 assert(!(wp < wp3 || wp3 < wp));
303 assert(wp2.use_count() == wp.use_count());
304 assert(wp2.use_count() == 1);
305 assert(!(wp < wp2 || wp2 < wp));
308 assert(!(wp < wp2 || wp2 < wp));
311 assert(wp3.use_count() == wp.use_count());
312 assert(wp3.use_count() == 0);
313 assert(!(wp < wp3 || wp3 < wp));
321 assert(wp2.use_count() == wp.use_count());
322 assert(wp2.use_count() == 1);
323 assert(!(wp < wp2 || wp2 < wp));
326 assert(!(wp < wp2 || wp2 < wp));
329 assert(wp3.use_count() == wp.use_count());
330 assert(wp3.use_count() == 0);
331 assert(!(wp < wp3 || wp3 < wp));
371 assert(!(wp < wp2 || wp2 < wp));
374 assert(!(wp < wp2 || wp2 < wp));
379 assert(!(wp < wp3 || wp3 < wp));
389 assert(!(wp < wp2 || wp2 < wp));
392 assert(!(wp < wp2 || wp2 < wp));
397 assert(!(wp < wp3 || wp3 < wp));
407 assert(!(wp < wp2 || wp2 < wp));
410 assert(!(wp < wp2 || wp2 < wp));
415 assert(!(wp < wp3 || wp3 < wp));
425 assert(!(wp < wp2 || wp2 < wp));
428 assert(!(wp < wp2 || wp2 < wp));
433 assert(!(wp < wp3 || wp3 < wp));
443 assert(!(wp < wp2 || wp2 < wp));
446 assert(!(wp < wp2 || wp2 < wp));
451 assert(!(wp < wp3 || wp3 < wp));
461 assert(!(wp < wp2 || wp2 < wp));
464 assert(!(wp < wp2 || wp2 < wp));
469 assert(!(wp < wp3 || wp3 < wp));
479 assert(!(wp < wp2 || wp2 < wp));
482 assert(!(wp < wp2 || wp2 < wp));
487 assert(!(wp < wp3 || wp3 < wp));
619template<
class T,
class U >
679 shared_ptr_assignment<int>( p );
684 shared_ptr_assignment<void>( p );
689 shared_ptr_assignment<X>( p );
694 shared_ptr_assignment<void>( p );
699 shared_ptr_assignment<void>( p );
704 shared_ptr_assignment<incomplete>( p );
709 shared_ptr_assignment<void>( p );
718template<
class T,
class U >
782 test2<incomplete>( p );
811 assert(wp3.use_count() == 0);
812 assert(wp3.expired());
819 assert(wp.use_count() == 1);
820 assert(!wp.expired());
823 assert(wp.use_count() == 1);
824 assert(!wp.expired());
827 assert(wp.use_count() == 1);
828 assert(!wp.expired());
829 assert(wp3.use_count() == 1);
830 assert(!wp3.expired());
834 assert(wp.use_count() == 2);
835 assert(!wp.expired());
836 assert(wp2.use_count() == 2);
837 assert(!wp2.expired());
838 assert(wp3.use_count() == 2);
839 assert(!wp3.expired());
843 assert(wp.use_count() == 3);
844 assert(!wp.expired());
845 assert(wp2.use_count() == 3);
846 assert(!wp2.expired());
847 assert(wp3.use_count() == 3);
848 assert(!wp3.expired());
852 assert(wp.use_count() == 2);
853 assert(!wp.expired());
854 assert(wp2.use_count() == 2);
855 assert(!wp2.expired());
856 assert(wp3.use_count() == 2);
857 assert(!wp3.expired());
861 assert(wp.use_count() == 1);
862 assert(!wp.expired());
863 assert(wp2.use_count() == 1);
864 assert(!wp2.expired());
865 assert(wp3.use_count() == 1);
866 assert(!wp3.expired());
870 assert(wp.use_count() == 0);
871 assert(wp.expired());
872 assert(wp2.use_count() == 0);
873 assert(wp2.expired());
874 assert(wp3.use_count() == 0);
875 assert(wp3.expired());
913 assert(!(wp < wp3 || wp3 < wp));
920 assert(!(wp2 < wp3 || wp3 < wp2));
928 assert(!(wp < wp3 || wp3 < wp));
935 assert(!(wp2 < wp3 || wp3 < wp2));
949 assert(!(wp < wp3 || wp3 < wp));
956 assert(!(wp2 < wp3 || wp3 < wp2));
964 assert(!(wp < wp3 || wp3 < wp));
971 assert(!(wp2 < wp3 || wp3 < wp2));
979 assert(!(wp < wp3 || wp3 < wp));
986 assert(!(wp2 < wp3 || wp3 < wp2));
1003 assert(!(wp < wp2 && wp2 < wp));
1006 assert(!(wp3 < wp3));
1007 assert(!(wp < wp3 && wp3 < wp));
1017 assert(wp < wp2 || wp2 < wp);
1018 assert(!(wp < wp2 && wp2 < wp));
1026 assert(!(wp < wp3 || wp3 < wp));
1027 assert(!(wp < wp3 && wp3 < wp));
1029 assert(wp2 < wp3 || wp3 < wp2);
1030 assert(!(wp2 < wp3 && wp3 < wp2));
1034 assert(wp4 < wp3 || wp3 < wp4);
1035 assert(!(wp4 < wp3 && wp3 < wp4));
1040 assert(b1 == (wp < wp2));
1041 assert(b2 == (wp2 < wp));
1046 assert(!(wp < wp3 || wp3 < wp));
1047 assert(!(wp < wp3 && wp3 < wp));
1049 assert(wp2 < wp3 || wp3 < wp2);
1050 assert(!(wp2 < wp3 && wp3 < wp2));
1054 assert(wp4 < wp3 || wp3 < wp4);
1055 assert(!(wp4 < wp3 && wp3 < wp4));
1066 assert(wp < wp2 || wp2 < wp);
1067 assert(!(wp < wp2 && wp2 < wp));
1075 assert(!(wp < wp3 || wp3 < wp));
1076 assert(!(wp < wp3 && wp3 < wp));
1078 assert(wp2 < wp3 || wp3 < wp2);
1079 assert(!(wp2 < wp3 && wp3 < wp2));
1083 assert(wp4 < wp3 || wp3 < wp4);
1084 assert(!(wp4 < wp3 && wp3 < wp4));
1089 assert(b1 == (wp < wp2));
1090 assert(b2 == (wp2 < wp));
1095 assert(!(wp < wp3 || wp3 < wp));
1096 assert(!(wp < wp3 && wp3 < wp));
1098 assert(wp2 < wp3 || wp3 < wp2);
1099 assert(!(wp2 < wp3 && wp3 < wp2));
1103 assert(wp4 < wp3 || wp3 < wp4);
1104 assert(!(wp4 < wp3 && wp3 < wp4));
1109 assert(b1 == (wp < wp2));
1110 assert(b2 == (wp2 < wp));
1115 assert(!(wp < wp3 || wp3 < wp));
1116 assert(!(wp < wp3 && wp3 < wp));
1118 assert(wp2 < wp3 || wp3 < wp2);
1119 assert(!(wp2 < wp3 && wp3 < wp2));
1123 assert(wp4 < wp3 || wp3 < wp4);
1124 assert(!(wp4 < wp3 && wp3 < wp4));
1135 assert(!(wp < wp2 || wp2 < wp));
1136 assert(!(wp < wp2 && wp2 < wp));
1144 assert(!(wp < wp3 || wp3 < wp));
1145 assert(!(wp < wp3 && wp3 < wp));
1147 assert(!(wp2 < wp3 || wp3 < wp2));
1148 assert(!(wp2 < wp3 && wp3 < wp2));
1152 assert(!(wp4 < wp3 || wp3 < wp4));
1153 assert(!(wp4 < wp3 && wp3 < wp4));
1159 assert(b1 == (wp < wp2));
1160 assert(b2 == (wp2 < wp));
1165 assert(!(wp < wp3 || wp3 < wp));
1166 assert(!(wp < wp3 && wp3 < wp));
1168 assert(!(wp2 < wp3 || wp3 < wp2));
1169 assert(!(wp2 < wp3 && wp3 < wp2));
1173 assert(!(wp4 < wp3 || wp3 < wp4));
1174 assert(!(wp4 < wp3 && wp3 < wp4));
1187 assert(px < py || py < px);
1188 assert(px < pz || pz < px);
1189 assert(py < pz || pz < py);
1191 assert(!(px < py && py < px));
1192 assert(!(px < pz && pz < px));
1193 assert(!(py < pz && pz < py));
1196 assert(!(pvx < pvx));
1199 assert(!(pvy < pvy));
1202 assert(!(pvz < pvz));
1204 assert(pvx < pvy || pvy < pvx);
1205 assert(pvx < pvz || pvz < pvx);
1206 assert(pvy < pvz || pvz < pvy);
1208 assert(!(pvx < pvy && pvy < pvx));
1209 assert(!(pvx < pvz && pvz < pvx));
1210 assert(!(pvy < pvz && pvz < pvy));
1216 assert(px < py || py < px);
1217 assert(px < pz || pz < px);
1218 assert(py < pz || pz < py);
1220 assert(!(px < py && py < px));
1221 assert(!(px < pz && pz < px));
1222 assert(!(py < pz && pz < py));
1224 assert(!(pvx < pvx));
1225 assert(!(pvy < pvy));
1226 assert(!(pvz < pvz));
1228 assert(pvx < pvy || pvy < pvx);
1229 assert(pvx < pvz || pvz < pvx);
1230 assert(pvy < pvz || pvz < pvy);
1232 assert(!(pvx < pvy && pvy < pvx));
1233 assert(!(pvx < pvz && pvz < pvx));
1234 assert(!(pvy < pvz && pvz < pvy));
1248 assert(!(px < py || py < px));
1249 assert(!(px < pz || pz < px));
1250 assert(!(py < pz || pz < py));
1256 assert(!(pvx < pvy || pvy < pvx));
1257 assert(!(pvx < pvz || pvz < pvx));
1258 assert(!(pvy < pvz || pvz < pvy));
1266 assert(!(px < py || py < px));
1267 assert(!(px < pz || pz < px));
1268 assert(!(py < pz || pz < py));
1270 assert(!(pvx < pvy || pvy < pvx));
1271 assert(!(pvx < pvz || pvz < pvx));
1272 assert(!(pvy < pvz || pvz < pvy));
1294 std::vector< shared_ptr<int> > vi;
1314 std::vector< shared_ptr<X> > vx;
1334 std::map< weak_ptr<void>,
long >
m;
1337 for(std::vector<
shared_ptr<int> >::iterator i = vi.begin(); i != vi.end(); ++i)
1344 for(std::vector<
shared_ptr<X> >::iterator i = vx.begin(); i != vx.end(); ++i)
1351 for(std::map<
weak_ptr<void>,
long >::iterator i =
m.begin(); i !=
m.end(); ++i)
1353 assert(i->first.use_count() == i->second);
void swap(this_type &other)
void swap(shared_ptr< P > &, shared_ptr< P > &)
void conversion_assignment()
void shared_ptr_assignment(shared_ptr< U > &sp, T *=0)
void shared_ptr_constructor()
void conversion_constructor()
void default_constructor()
void test2(shared_ptr< U > &sp, T *=0)
shared_ptr< incomplete > create_incomplete()