Remove CDS_CXX11_TEMPLATE_ALIAS_SUPPORT macro and emulating code
authorkhizmax <khizmax@gmail.com>
Tue, 23 Sep 2014 13:22:34 +0000 (17:22 +0400)
committerkhizmax <khizmax@gmail.com>
Tue, 23 Sep 2014 13:22:34 +0000 (17:22 +0400)
13 files changed:
cds/compiler/clang/defs.h
cds/compiler/defs.h
cds/compiler/gcc/defs.h
cds/compiler/icl/defs.h
cds/compiler/vc/defs.h
cds/container/cuckoo_set.h
cds/details/binary_functor_wrapper.h
cds/gc/hp_decl.h
cds/gc/hrc/hrc.h
cds/gc/hzp/details/hp_alloc.h
cds/gc/ptb_decl.h
cds/intrusive/basket_queue.h
cds/urcu/details/base.h

index 078a0a6ad975577ad1eb86584fc575d7fd036df9..9ca62d89dcfe92f63a11ab1449e3ecffbeec00a8 100644 (file)
@@ -40,9 +40,6 @@
 // Explicit conversion operators
 #define CDS_CXX11_EXPLICIT_CONVERSION_OPERATOR_SUPPORT
 
-// C++11 template alias
-#define CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
-
 // C++11 inline namespace
 #define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
 
index 059cc4a13ee73768635ad9c39d4ac47e40bbe091..a373fbcc8e496402143465407ca144119dd2d928 100644 (file)
@@ -3,6 +3,11 @@
 #ifndef __CDS_ARH_COMPILER_DEFS_H
 #define __CDS_ARH_COMPILER_DEFS_H
 
+/*
+    Required C++11 features:
+    - template alias [CDS_CXX11_TEMPLATE_ALIAS_SUPPORT]
+*/
+
 #if CDS_COMPILER == CDS_COMPILER_MSVC
 #   include <cds/compiler/vc/defs.h>
 #elif CDS_COMPILER == CDS_COMPILER_GCC
index 471a905d9f027e41a2b998b31e02e4b156e1fd48..2bfacc0653dd334ee65a5f81ebdff5cb24fecfb9 100644 (file)
 #define CDS_NOEXCEPT_SUPPORT_(expr) noexcept(expr)
 #define CDS_CONSTEXPR_CONST constexpr const
 
-// C++11 template alias
-#define CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
-
 // C++11 thread_local keyword
 #define CDS_CXX11_THREAD_LOCAL_SUPPORT
 
 // Full SFINAE support
-#if CDS_COMPILER_VERSION >= 40700
-#   define CDS_CXX11_SFINAE
-#endif
+#define CDS_CXX11_SFINAE
 
 // *************************************************
 // Alignment macro
index 195b69a04799de290018ccd400fda560f61625dc..1037ba0717cf371b1726abdf54ecc92cbf48e701 100644 (file)
 // Variadic template support (ICL 12.1+)
 #define CDS_CXX11_VARIADIC_TEMPLATE_SUPPORT     1
 
-// C++11 template alias
-#define CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
-
 // C++11 inline namespace
 #define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
 
index 8e20209d281b2bc1afe888e7832e2411f6831db7..59a33d034426bb256168846e0a2e0e276ab28e9e 100644 (file)
 // Variadic template support (VC12+)
 #define CDS_CXX11_VARIADIC_TEMPLATE_SUPPORT     1
 
-// C++11 template alias
-#define CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
-
 // C++11 inline namespace
 //#define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
 
index 14f77297d8af79f7a5082b111718ff451167afd7..c1ffe3d995058a1dcdf3ec99060732adeaf9989a 100644 (file)
@@ -46,14 +46,8 @@ namespace cds { namespace container {
                 }
             };
 
-#ifdef CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
             template <typename Pred, typename ReturnValue>
             using predicate_wrapper = cds::details::binary_functor_wrapper< ReturnValue, Pred, node_type, value_accessor >;
-#else
-            template <typename Pred, typename ReturnValue>
-            struct predicate_wrapper: public cds::details::binary_functor_wrapper< ReturnValue, Pred, node_type, value_accessor >
-            {};
-#endif
 
             struct intrusive_traits: public original_type_traits
             {
index 1acbb2a5f35bdf9c11094921aa16d6f6cd4d8e03..f82b887c01af580d22874d4d15f8c089b6400e40 100644 (file)
@@ -39,21 +39,11 @@ namespace cds { namespace details {
         }
     };
 
-#ifdef CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
     template <typename ArgType, typename Predicate, typename Accessor>
     using predicate_wrapper = binary_functor_wrapper< bool, Predicate, ArgType, Accessor>;
 
     template <typename ArgType, typename Compare, typename Accessor>
     using compare_wrapper = binary_functor_wrapper< int, Compare, ArgType, Accessor>;
-#else
-    template <typename ArgType, typename Predicate, typename Accessor>
-    struct predicate_wrapper: public binary_functor_wrapper< bool, Predicate, ArgType, Accessor>
-    {};
-
-    template <typename ArgType, typename Compare, typename Accessor>
-    struct compare_wrapper: public binary_functor_wrapper< int, Compare, ArgType, Accessor >
-    {};
-#endif
 
 }} // namespace cds::details
 
index d2c98b7401cfeec87b3bd74691b47e8cb16319df..3b274db63608e6db7dabd7b834e67a8d09e3a917 100644 (file)
@@ -28,7 +28,6 @@ namespace cds { namespace gc {
         /// Native guarded pointer type
         typedef gc::hzp::hazard_pointer guarded_pointer;
 
-#ifdef CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
         /// Atomic reference
         /**
             @headerfile cds/gc/hp.h
@@ -46,61 +45,6 @@ namespace cds { namespace gc {
             @headerfile cds/gc/hp.h
         */
         template <typename T> using atomic_type = atomics::atomic<T>;
-#else
-        template <typename T>
-        class atomic_ref: public atomics::atomic<T *>
-        {
-            typedef atomics::atomic<T *> base_class;
-        public:
-#   ifdef CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT
-            atomic_ref() = default;
-#   else
-            atomic_ref()
-                : base_class()
-            {}
-#   endif
-            explicit CDS_CONSTEXPR atomic_ref(T * p) CDS_NOEXCEPT
-                : base_class( p )
-            {}
-        };
-
-        template <typename T>
-        class atomic_type: public atomics::atomic<T>
-        {
-            typedef atomics::atomic<T> base_class;
-        public:
-#   ifdef CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT
-            atomic_type() = default;
-#   else
-            atomic_type() CDS_NOEXCEPT
-                : base_class()
-            {}
-#   endif
-            explicit CDS_CONSTEXPR atomic_type(T const & v) CDS_NOEXCEPT
-                : base_class( v )
-            {}
-        };
-
-        template <typename MarkedPtr>
-        class atomic_marked_ptr: public atomics::atomic<MarkedPtr>
-        {
-            typedef atomics::atomic<MarkedPtr> base_class;
-        public:
-#   ifdef CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT
-            atomic_marked_ptr() CDS_NOEXCEPT_DEFAULTED_( noexcept(base_class()) ) = default;
-#   else
-            atomic_marked_ptr() CDS_NOEXCEPT_( noexcept(base_class()) )
-                : base_class()
-            {}
-#   endif
-            explicit CDS_CONSTEXPR atomic_marked_ptr(MarkedPtr val) CDS_NOEXCEPT_( noexcept(base_class( val )) )
-                : base_class( val )
-            {}
-            explicit CDS_CONSTEXPR atomic_marked_ptr(typename MarkedPtr::value_type * p) CDS_NOEXCEPT_( noexcept(base_class( p )) )
-                : base_class( p )
-            {}
-        };
-#endif
 
         /// Thread GC implementation for internal usage
         typedef hzp::ThreadGC   thread_gc_impl;
index a5e45e51e244c90b2f8cd572b8165ff1ddb3e905..96cb160673893746afcef2edafa5cbc261d65cd8 100644 (file)
@@ -184,13 +184,7 @@ namespace cds { namespace gc {
             /**
                 This is wrapper for cds::gc::hzp::details::HPArray class
             */
-#ifdef CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
             template <size_t Count> using HPArray = gc::hzp::details::HPArrayT<ContainerNode *, Count >;
-#else
-            template <size_t Count>
-            class HPArray: public gc::hzp::details::HPArrayT<ContainerNode *, Count>
-            {};
-#endif
 
             /// HP record of the thread
             /**
index ad69e3cf17e90527b4e5f37b52c63ac30c7521c2..83a8772f3d45ba6d4e8dfd3b5788fafe85451f55 100644 (file)
@@ -176,13 +176,7 @@ namespace cds {
         };
 
         /// Specialization of HPArrayT class for hazard_pointer type
-#ifdef CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
         template <size_t Count> using HPArray = HPArrayT<hazard_pointer, Count >;
-#else
-        template <size_t Count>
-        class HPArray: public HPArrayT<hazard_pointer, Count>
-        {};
-#endif
 
         /// Allocator of hazard pointers for the thread
         /**
index eae4dcf86f6c13595e7815acf7a2f8b3215e69c9..1c3b830518269772fb9d4c51d94bbb280d8416cf 100644 (file)
@@ -30,7 +30,6 @@ namespace cds { namespace gc {
         /// Native guarded pointer type
         typedef void * guarded_pointer;
 
-#ifdef CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
         /// Atomic reference
         /**
             @headerfile cds/gc/ptb.h
@@ -48,61 +47,6 @@ namespace cds { namespace gc {
             @headerfile cds/gc/ptb.h
         */
         template <typename MarkedPtr> using atomic_marked_ptr = atomics::atomic<MarkedPtr>;
-#else
-        template <typename T>
-        class atomic_ref: public atomics::atomic<T *>
-        {
-            typedef atomics::atomic<T *> base_class;
-        public:
-#   ifdef CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT
-            atomic_ref() = default;
-#   else
-            atomic_ref()
-                : base_class()
-            {}
-#   endif
-            explicit CDS_CONSTEXPR atomic_ref(T * p) CDS_NOEXCEPT
-                : base_class( p )
-            {}
-        };
-
-        template <typename T>
-        class atomic_type: public atomics::atomic<T>
-        {
-            typedef atomics::atomic<T> base_class;
-        public:
-#   ifdef CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT
-            atomic_type() = default;
-#   else
-            atomic_type() CDS_NOEXCEPT
-                : base_class()
-            {}
-#   endif
-            explicit CDS_CONSTEXPR atomic_type(T const & v) CDS_NOEXCEPT
-                : base_class( v )
-            {}
-        };
-
-        template <typename MarkedPtr>
-        class atomic_marked_ptr: public atomics::atomic<MarkedPtr>
-        {
-            typedef atomics::atomic<MarkedPtr> base_class;
-        public:
-#   ifdef CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT
-            atomic_marked_ptr() = default;
-#   else
-            atomic_marked_ptr()
-                : base_class()
-            {}
-#   endif
-            explicit CDS_CONSTEXPR atomic_marked_ptr(MarkedPtr val) CDS_NOEXCEPT
-                : base_class( val )
-            {}
-            explicit CDS_CONSTEXPR atomic_marked_ptr(typename MarkedPtr::value_type * p) CDS_NOEXCEPT
-                : base_class( p )
-            {}
-        };
-#endif
 
         /// Thread GC implementation for internal usage
         typedef ptb::ThreadGC   thread_gc_impl;
index 4e52726c8f4a3fb4de2819a5755c9f725dd5ce22..5b214da50e10e99133e46466f553e6015b3e251b 100644 (file)
@@ -153,16 +153,8 @@ namespace cds { namespace intrusive {
             //@endcond
         };
 
-
-#if defined(CDS_CXX11_TEMPLATE_ALIAS_SUPPORT) && !defined(CDS_DOXYGEN_INVOKED)
-        template < typename Node, opt::link_check_type LinkType > using get_link_checker = single_link::get_link_checker< Node, LinkType >;
-#else
         /// Metafunction for selecting appropriate link checking policy
-        template < typename Node, opt::link_check_type LinkType >
-        struct get_link_checker: public single_link::get_link_checker< Node, LinkType >
-        {};
-
-#endif
+        template < typename Node, opt::link_check_type LinkType > using get_link_checker = single_link::get_link_checker< Node, LinkType >;
 
         /// Basket queue internal statistics. May be used for debugging or profiling
         /**
index 5443acb03a5a7cdc4a41ec990b33c58193cba96e..e45a862ac16ada4f71a1a913ced696bd7fb030a9 100644 (file)
@@ -286,29 +286,7 @@ namespace cds {
             class gc_common
             {
             public:
-#       ifdef CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
                 template <typename MarkedPtr> using atomic_marked_ptr = atomics::atomic<MarkedPtr>;
-#       else
-                template <typename MarkedPtr>
-                class atomic_marked_ptr: public atomics::atomic<MarkedPtr>
-                {
-                    typedef atomics::atomic<MarkedPtr> base_class;
-                public:
-#           ifdef CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT
-                    atomic_marked_ptr() CDS_NOEXCEPT_DEFAULTED_( noexcept(base_class()) ) = default;
-#           else
-                    atomic_marked_ptr() CDS_NOEXCEPT_( noexcept(base_class()) )
-                        : base_class()
-                    {}
-#           endif
-                    explicit CDS_CONSTEXPR atomic_marked_ptr(MarkedPtr val) CDS_NOEXCEPT_( noexcept(base_class( val )) )
-                        : base_class( val )
-                    {}
-                    explicit CDS_CONSTEXPR atomic_marked_ptr(typename MarkedPtr::value_type * p) CDS_NOEXCEPT_( noexcept(base_class( p )) )
-                        : base_class( p )
-                    {}
-                };
-#       endif
             };
             //@endcond