Add SCons configure checks
[senf.git] / boost_ext / boost / bimap / relation / detail / static_access_builder.hpp
diff --git a/boost_ext/boost/bimap/relation/detail/static_access_builder.hpp b/boost_ext/boost/bimap/relation/detail/static_access_builder.hpp
new file mode 100644 (file)
index 0000000..72f9925
--- /dev/null
@@ -0,0 +1,105 @@
+// Boost.Bimap
+//
+// Copyright (c) 2006-2007 Matias Capeletto
+//
+// 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)
+
+
+/// \file relation/detail/static_access_builder.hpp
+/// \brief Define macros to help building metafunctions
+
+#ifndef BOOST_BIMAP_RELATION_DETAIL_STATIC_ACCESS_BUILDER_HPP
+#define BOOST_BIMAP_RELATION_DETAIL_STATIC_ACCESS_BUILDER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#include <boost/bimap/relation/support/is_tag_of_member_at.hpp>
+#include <boost/bimap/detail/debug/static_error.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+
+
+/******************************************************************************
+              BIMAP SYMMETRIC STATIC ACCESS INTERFACE
+*******************************************************************************
+
+template< class Tag, class SYMETRIC_TYPE >
+struct NAME
+{
+    -UNDEFINED BODY-;
+};
+
+******************************************************************************/
+
+
+/*===========================================================================*/
+#define BOOST_BIMAP_SYMMETRIC_STATIC_ACCESS_BUILDER(                          \
+                                                                              \
+        NAME,                                                                 \
+        SYMMETRIC_TYPE,                                                       \
+        LEFT_BODY,                                                            \
+        RIGHT_BODY                                                            \
+    )                                                                         \
+                                                                              \
+    template                                                                  \
+    <                                                                         \
+        class Tag,                                                            \
+        class SYMMETRIC_TYPE,                                                 \
+        class Enable = void                                                   \
+    >                                                                         \
+    struct NAME                                                               \
+    {                                                                         \
+        BOOST_BIMAP_STATIC_ERROR(                                             \
+            BOOST_PP_CAT(NAME,_FAILURE),                                      \
+            (SYMMETRIC_TYPE,Tag)                                              \
+        );                                                                    \
+    };                                                                        \
+                                                                              \
+    template< class Tag, class SYMMETRIC_TYPE >                               \
+    struct NAME                                                               \
+    <                                                                         \
+        Tag, SYMMETRIC_TYPE,                                                  \
+        BOOST_DEDUCED_TYPENAME enable_if                                      \
+        <                                                                     \
+            ::boost::bimaps::relation::support::is_tag_of_member_at_left      \
+            <                                                                 \
+                Tag,                                                          \
+                SYMMETRIC_TYPE                                                \
+            >                                                                 \
+                                                                              \
+        >::type                                                               \
+    >                                                                         \
+    {                                                                         \
+        LEFT_BODY;                                                            \
+    };                                                                        \
+                                                                              \
+    template< class Tag, class SYMMETRIC_TYPE >                               \
+    struct NAME                                                               \
+    <                                                                         \
+        Tag, SYMMETRIC_TYPE,                                                  \
+        BOOST_DEDUCED_TYPENAME enable_if                                      \
+        <                                                                     \
+            ::boost::bimaps::relation::support::is_tag_of_member_at_right     \
+            <                                                                 \
+                Tag,                                                          \
+                SYMMETRIC_TYPE                                                \
+            >                                                                 \
+                                                                              \
+        >::type                                                               \
+    >                                                                         \
+    {                                                                         \
+        RIGHT_BODY;                                                           \
+    };
+/*===========================================================================*/
+
+
+#endif // BOOST_BIMAP_RELATION_DETAIL_STATIC_ACCES_BUILDER_HPP
+
+