From ffc35c33c012e1ad5327abdf10c930eb1c293f04 Mon Sep 17 00:00:00 2001 From: g0dil <g0dil@wiback.org> Date: Wed, 6 Jun 2007 08:39:09 +0000 Subject: [PATCH] Fix bug in SocketPolicy::checkBaseOf --- Socket/SocketPolicy.ct | 2 +- Socket/SocketPolicy.test.cc | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Socket/SocketPolicy.ct b/Socket/SocketPolicy.ct index bec4f71bc..db5ea1cfb 100644 --- a/Socket/SocketPolicy.ct +++ b/Socket/SocketPolicy.ct @@ -41,7 +41,7 @@ checkBaseOf(SocketPolicyBase const & other) // check, wether each policy of other is (dynamically!) convertible // to the corresponding (static) policy of this class. Throws // std::bad_cast on failure -# define SP_CheckPolicy(x1,x2,SomePolicy) (void) dynamic_cast<SomePolicy const &>(other.BOOST_PP_CAT(the,SomePolicy)()); +# define SP_CheckPolicy(x1,x2,SomePolicy) (void) dynamic_cast<BOOST_PP_CAT(SomePolicy,_) const &>(other.BOOST_PP_CAT(the,SomePolicy)()); BOOST_PP_SEQ_FOR_EACH( SP_CheckPolicy, , SENF_SOCKET_POLICIES ) # undef SP_CheckPolicy } diff --git a/Socket/SocketPolicy.test.cc b/Socket/SocketPolicy.test.cc index 534f40d6e..83aa97566 100644 --- a/Socket/SocketPolicy.test.cc +++ b/Socket/SocketPolicy.test.cc @@ -83,7 +83,7 @@ namespace { BOOST_AUTO_UNIT_TEST(socketPolicy) { - // All these checks are really compile-time checks ... + // Most of these checks are really compile-time checks ... typedef MakeSocketPolicy< UnixAddressingPolicy, @@ -122,12 +122,22 @@ BOOST_AUTO_UNIT_TEST(socketPolicy) // The following should fail at compile time // BOOST_MPL_ASSERT(( SocketPolicyIsBaseOf<Policy1,Policy3> )); - ConvertibleValue<Policy1> p1; - ConvertibleValue<Policy3> p3(p1); + { + ConvertibleValue<Policy1> p1; + ConvertibleValue<Policy3> p3(p1); + + p3 = p1; + // The following should fail at compile time + // p1 = p3; + } + + { + Policy1 p1; + Policy3 p3; - p3 = p1; - // The following should fail at compile time - // p1 = p3; + BOOST_CHECK_THROW( Policy1::checkBaseOf(p3), std::bad_cast ); + BOOST_CHECK_NO_THROW( Policy3::checkBaseOf(p1) ); + } } ///////////////////////////////cc.e//////////////////////////////////////// -- GitLab