Added code to demonstrate how SmartPtr preserves constness through type-safety.

git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@986 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
rich_sposato 2009-02-17 05:25:13 +00:00
parent 4b43d68311
commit c93b2e11d1

View file

@ -101,6 +101,10 @@ typedef Loki::SmartPtr< BaseClass, DestructiveCopy, DisallowConversion,
AssertCheck, DefaultSPStorage, DontPropagateConst >
NonConstBase_KillCopy_NoConvert_Assert_DontPropagate_ptr;
typedef Loki::SmartPtr< const BaseClass, DestructiveCopy, DisallowConversion,
AssertCheck, DefaultSPStorage, DontPropagateConst >
ConstBase_KillCopy_NoConvert_Assert_DontPropagate_ptr;
typedef Loki::SmartPtr< BaseClass, NoCopy, DisallowConversion,
AssertCheck, DefaultSPStorage, DontPropagateConst >
NonConstBase_NoCopy_NoConvert_Assert_DontPropagate_ptr;
@ -213,6 +217,21 @@ void DoOwnershipConversionTests( void )
// NonConstBase_NoCopy_NoConvert_Assert_DontPropagate_ptr p41( p4 );
// NonConstBase_NoCopy_NoConvert_Assert_DontPropagate_ptr p42( p5 );
// These constructions are legal because the preserve const-ness.
ConstBase_KillCopy_NoConvert_Assert_DontPropagate_ptr p43( p5 );
ConstBase_KillCopy_NoConvert_Assert_DontPropagate_ptr p44( p43 );
const BaseClass * rawP = new BaseClass;
// These constructions are illegal because the don't preserve constness.
// NonConstBase_KillCopy_NoConvert_Assert_DontPropagate_ptr p45( rawP );
// NonConstBase_KillCopy_NoConvert_Assert_DontPropagate_ptr p46( p43 );
ConstBase_KillCopy_NoConvert_Assert_DontPropagate_ptr p47( rawP );
NonConstBase_KillCopy_NoConvert_Assert_DontPropagate_ptr p48;
// This assignment is legal because it preserves constness.
p48 = p5;
// This assignment is illegal because it won't preserve constness.
// p48 = p43;
// illegal assignements! Can't convert from one ownership policy to another.
// p1 = p2;
// p1 = p3;