#define alignof __alignof__
-// C++11 delete definition ( function declaration = delete)
-#define CDS_CXX11_DELETE_DEFINITION_SUPPORT
-
// C++11 inline namespace
#define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
}
};
-#ifndef CDS_CXX11_DELETE_DEFINITION_SUPPORT
- class atomic_noncopyable
- {
- private:
- atomic_noncopyable(const atomic_noncopyable&);
- atomic_noncopyable& operator=(const atomic_noncopyable&);
- //atomic_noncopyable& operator=(const atomic_noncopyable&) volatile;
- protected:
- atomic_noncopyable() = default;
- };
-#endif
-
template <typename T>
struct atomic_integral
-#ifndef CDS_CXX11_DELETE_DEFINITION_SUPPORT
- : atomic_noncopyable
-#endif
{
private:
typename cds::details::aligned_type<T, sizeof(T)>::type volatile m_val;
: m_val(val)
{}
-#ifdef CDS_CXX11_DELETE_DEFINITION_SUPPORT
atomic_integral(const atomic_integral&) = delete;
atomic_integral& operator=(const atomic_integral&) = delete;
atomic_integral& operator=(const atomic_integral&) volatile = delete;
-#endif
+
T operator=(T val) volatile CDS_NOEXCEPT
{
store(val);
template <class T>
struct atomic
-#ifndef CDS_CXX11_DELETE_DEFINITION_SUPPORT
- : details::atomic_noncopyable
-#endif
{
private:
typedef details::atomic_generic_ops<T, sizeof(T), typename details::select_primary_type<T>::type > atomic_ops;
: m_data( val )
{}
-#ifdef CDS_CXX11_DELETE_DEFINITION_SUPPORT
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
-#endif
T operator=(T val) volatile CDS_NOEXCEPT
{
}
};
-#if defined(CDS_CXX11_DELETE_DEFINITION_SUPPORT)
# define CDS_DECLARE_ATOMIC_INTEGRAL( _type ) \
template <> \
struct atomic<_type>: public details::atomic_integral<_type> \
_type operator=(_type val) volatile CDS_NOEXCEPT { return base_class::operator=(val); } \
_type operator=(_type val) CDS_NOEXCEPT { return base_class::operator=(val); } \
};
-#else
-# define CDS_DECLARE_ATOMIC_INTEGRAL( _type ) \
- template <> \
- struct atomic<_type>: public details::atomic_integral<_type> \
- { \
- private: \
- typedef details::atomic_integral<_type> base_class ; \
- public: \
- atomic() {} \
- atomic(_type val) CDS_NOEXCEPT : base_class(val) {} \
- _type operator=(_type val) volatile CDS_NOEXCEPT { return base_class::operator=(val); } \
- _type operator=(_type val) CDS_NOEXCEPT { return base_class::operator=(val); } \
- };
-#endif
CDS_DECLARE_ATOMIC_INTEGRAL(char)
CDS_DECLARE_ATOMIC_INTEGRAL(signed char)
template <typename T>
class atomic<T *>
-#ifndef CDS_CXX11_DELETE_DEFINITION_SUPPORT
- : details::atomic_noncopyable
-#endif
{
private:
T * volatile m_ptr;
: m_ptr( val )
{}
-#ifdef CDS_CXX11_DELETE_DEFINITION_SUPPORT
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
-#endif
T * operator=(T * val) volatile CDS_NOEXCEPT
{
atomic_flag() = default;
-#ifdef CDS_CXX11_DELETE_DEFINITION_SUPPORT
atomic_flag(const atomic_flag&) = delete;
atomic_flag& operator=(const atomic_flag&) = delete;
atomic_flag& operator=(const atomic_flag&) volatile = delete;
-#elif CDS_COMPILER != CDS_COMPILER_MSVC
- // MS VC generate error C2552 "non-aggregates cannot be initialized with initializer list"
- // when atomic_flag initializes with ATOMIC_FLAG_INIT
- private:
- atomic_flag(const atomic_flag&);
- atomic_flag& operator=(const atomic_flag&);
- atomic_flag& operator=(const atomic_flag&) volatile;
- public:
-#endif
platform::atomic_flag_type volatile m_Flag;
} atomic_flag;
- explicit conversion operator [CDS_CXX11_EXPLICIT_CONVERSION_OPERATOR_SUPPORT]
- default template argument for function [CDS_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS_SUPPORT]
- explicit default functions (=default) [CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT]
+ - =delete [CDS_CXX11_DELETE_DEFINITION_SUPPORT]
*/
#if CDS_COMPILER == CDS_COMPILER_MSVC
// C++11 inline namespace
#define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
-// C++11 delete definition ( function declaration = delete)
-#define CDS_CXX11_DELETE_DEFINITION_SUPPORT
-
// Lambda
#define CDS_CXX11_LAMBDA_SUPPORT
#define CDS_RVALUE_SUPPORT
#define CDS_MOVE_SEMANTICS_SUPPORT
-// C++11 delete definition ( function declaration = delete)
-#define CDS_CXX11_DELETE_DEFINITION_SUPPORT
-
// C++11 inline namespace
#define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
#define CDS_RVALUE_SUPPORT
#define CDS_MOVE_SEMANTICS_SUPPORT
-// C++11 delete definition ( function declaration = delete)
-#define CDS_CXX11_DELETE_DEFINITION_SUPPORT
-
// C++11 inline namespace
//#define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
+++ /dev/null
-//$$CDS-header$$
-
-#ifndef __CDS_DETAILS_CXX11_FEATURES_H
-#define __CDS_DETAILS_CXX11_FEATURES_H
-//@cond
-
-#ifndef __CDS_DEFS_H
-# error "<cds/details/cxx11_features.h> cannot be included directly, use <cds/details/defs.h> instead"
-#endif
-
-// =delete function specifier
-#ifdef CDS_CXX11_DELETE_DEFINITION_SUPPORT
-# define CDS_DELETE_SPECIFIER =delete
-#else
-# define CDS_DELETE_SPECIFIER
-#endif
-
-//@endcond
-#endif // #ifndef __CDS_DETAILS_CXX11_FEATURES_H
// Compiler-specific defines
#include <cds/compiler/defs.h>
-// New C++11 features
-#include <cds/details/cxx11_features.h>
#define CDS_NOEXCEPT CDS_NOEXCEPT_SUPPORT
#define CDS_NOEXCEPT_( expr ) CDS_NOEXCEPT_SUPPORT_( expr )
: m_atomic( p )
{}
-# ifdef CDS_CXX11_DELETE_DEFINITION_SUPPORT
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
-# endif
marked_ptr operator=(marked_ptr val) volatile CDS_NOEXCEPT
{
CDS_DOXYGEN_INVOKED \
cds_std=std \
CDS_URCU_SIGNAL_HANDLING_ENABLED \
- CDS_CXX11_DELETE_DEFINITION_SUPPORT \
CDS_CXX11_INLINE_NAMESPACE_SUPPORT \
CDS_CXX11_INLINE_NAMESPACE=inline \
CDS_CXX11_DECLTYPE_SUPPORT \
<ClInclude Include="..\..\..\cds\details\binary_functor_wrapper.h" />\r
<ClInclude Include="..\..\..\cds\details\bit_reverse_counter.h" />\r
<ClInclude Include="..\..\..\cds\details\bounded_container.h" />\r
- <ClInclude Include="..\..\..\cds\details\cxx11_features.h" />\r
<ClInclude Include="..\..\..\cds\details\hash_functor_selector.h" />\r
<ClInclude Include="..\..\..\cds\details\lib.h" />\r
<ClInclude Include="..\..\..\cds\details\numtraits.h" />\r
<ClInclude Include="..\..\..\cds\details\hash_functor_selector.h">\r
<Filter>Header Files\cds\details</Filter>\r
</ClInclude>\r
- <ClInclude Include="..\..\..\cds\details\cxx11_features.h">\r
- <Filter>Header Files\cds\details</Filter>\r
- </ClInclude>\r
<ClInclude Include="..\..\..\cds\gc\all.h">\r
<Filter>Header Files\cds\gc</Filter>\r
</ClInclude>\r