$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: igaztanaga_at_[hidden]
Date: 2008-07-08 12:57:57
Author: igaztanaga
Date: 2008-07-08 12:57:56 EDT (Tue, 08 Jul 2008)
New Revision: 47238
URL: http://svn.boost.org/trac/boost/changeset/47238
Log:
Convert link error to compile-time error when using swap_nodes() and unlink() with any_hooks
Text files modified: 
   trunk/boost/intrusive/detail/any_node_and_algorithms.hpp |    23 +++++++++--------------                 
   1 files changed, 9 insertions(+), 14 deletions(-)
Modified: trunk/boost/intrusive/detail/any_node_and_algorithms.hpp
==============================================================================
--- trunk/boost/intrusive/detail/any_node_and_algorithms.hpp	(original)
+++ trunk/boost/intrusive/detail/any_node_and_algorithms.hpp	2008-07-08 12:57:56 EDT (Tue, 08 Jul 2008)
@@ -18,6 +18,7 @@
 #include <boost/intrusive/detail/assert.hpp>
 #include <boost/intrusive/detail/pointer_to_other.hpp>
 #include <cstddef>
+#include <boost/intrusive/detail/mpl.hpp> 
 
 namespace boost {
 namespace intrusive {
@@ -238,6 +239,10 @@
 template<class VoidPointer>
 class any_algorithms
 {
+   template <class T>
+   static void function_not_available_for_any_hooks(typename detail::enable_if<detail::is_same<T, bool> >::type)
+   {}
+
    public:
    typedef any_node<VoidPointer>             node;
    typedef typename boost::pointer_to_other
@@ -269,28 +274,18 @@
    static bool unique(const_node_ptr node)
    {  return 0 == node->node_ptr_1; }
 
-
-#if defined(__EDG__) && defined(__STD_STRICT_ANSI)
-   // For compilers checking the full source code at compile time, regardless
-   // of whether the code is instantiated or not, we turn the compile error
-   // below into a link error.
-   static void unlink(node_ptr);
-   static void swap_nodes(node_ptr l, node_ptr r);
-#else
    static void unlink(node_ptr)
    {
-      //Auto-unlink hooks and unlink() call for safe hooks are not
-      //available for any hooks!!!
-      any_algorithms<VoidPointer>::unlink_not_available_for_any_hooks();
+      //Auto-unlink hooks and unlink() are not available for any hooks
+      any_algorithms<VoidPointer>::template function_not_available_for_any_hooks<node_ptr>();
    }
 
    static void swap_nodes(node_ptr l, node_ptr r)
    {
       //Any nodes have no swap_nodes capability because they don't know
-      //what algorithm they must use from unlink them from the container
-      any_algorithms<VoidPointer>::swap_nodes_not_available_for_any_hooks();
+      //what algorithm they must use to unlink the node from the container
+      any_algorithms<VoidPointer>::template function_not_available_for_any_hooks<node_ptr>();
    }
-#endif
 };
 
 } //namespace intrusive