Boost logo

Boost-Commit :

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>


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk