$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: igaztanaga_at_[hidden]
Date: 2008-06-21 05:11:39
Author: igaztanaga
Date: 2008-06-21 05:11:38 EDT (Sat, 21 Jun 2008)
New Revision: 46575
URL: http://svn.boost.org/trac/boost/changeset/46575
Log:
gcc 4.3 fixes for normal and -std=c++0x modes
Added:
   trunk/libs/interprocess/test/enable_shared_from_this_test.cpp   (contents, props changed)
Added: trunk/libs/interprocess/test/enable_shared_from_this_test.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/interprocess/test/enable_shared_from_this_test.cpp	2008-06-21 05:11:38 EDT (Sat, 21 Jun 2008)
@@ -0,0 +1,97 @@
+//////////////////////////////////////////////////////////////////////////////
+//  Copyright (c) 2002, 2003 Peter Dimov
+//
+// This file is the adaptation of shared_from_this_test.cpp from smart_ptr library
+//
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/interprocess for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#include <boost/interprocess/detail/config_begin.hpp>
+#include <boost/interprocess/detail/workaround.hpp>
+#include <boost/interprocess/smart_ptr/enable_shared_from_this.hpp>
+#include <boost/interprocess/smart_ptr/shared_ptr.hpp>
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/interprocess/managed_shared_memory.hpp>
+#include "get_process_id_name.hpp"
+
+//
+
+using namespace boost::interprocess;
+
+typedef allocator<void, managed_shared_memory::segment_manager>
+   v_allocator_t;
+
+struct X;
+
+typedef deleter<X, managed_shared_memory::segment_manager>  x_deleter_t;
+
+struct X :
+   public enable_shared_from_this<X, v_allocator_t, x_deleter_t>
+{
+};
+
+typedef shared_ptr<X, v_allocator_t, x_deleter_t>           v_shared_ptr;
+
+
+template<class ManagedMemory>
+void test_enable_shared_this(ManagedMemory &managed_mem)
+{
+   v_shared_ptr p(make_managed_shared_ptr
+      (managed_mem.template construct<X>(anonymous_instance)(), managed_mem));
+
+   v_shared_ptr q = p->shared_from_this();
+   BOOST_TEST(p == q);
+   BOOST_TEST(!(p < q) && !(q < p));
+
+   X v2(*p);
+
+   try
+   {
+      //This should throw bad_weak_ptr
+      v_shared_ptr r = v2.shared_from_this();
+      BOOST_ERROR("v2.shared_from_this() failed to throw");
+   }
+   catch(boost::interprocess::bad_weak_ptr const &)
+   {
+      //This is the expected path
+   }
+   catch(...){
+      BOOST_ERROR("v2.shared_from_this() threw an unexpected exception");
+   }
+
+   try
+   {
+      //This should not throw bad_weak_ptr
+      *p = X();
+      v_shared_ptr r = p->shared_from_this();
+      BOOST_TEST(p == r);
+      BOOST_TEST(!(p < r) && !(r < p));
+   }
+   catch(boost::interprocess::bad_weak_ptr const &)
+   {
+      BOOST_ERROR("p->shared_from_this() threw bad_weak_ptr after *p = X()");
+   }
+   catch(...)
+   {
+      BOOST_ERROR("p->shared_from_this() threw an unexpected exception after *p = X()");
+   }
+}
+
+
+int main()
+{
+   std::string process_name;
+   test::get_process_id_name(process_name);
+   shared_memory_object::remove(process_name.c_str());
+   managed_shared_memory shmem(create_only, process_name.c_str(), 65536);
+   test_enable_shared_this(shmem);
+   shared_memory_object::remove(process_name.c_str());
+   return boost::report_errors();
+}
+
+#include <boost/interprocess/detail/config_end.hpp>