3 #ifndef __CDS_COMPILER_CLANG_DEFS_H
4 #define __CDS_COMPILER_CLANG_DEFS_H
7 #define CDS_COMPILER_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
10 #define CDS_COMPILER__NAME ("clang " __clang_version__)
11 #define CDS_COMPILER__NICK "clang"
13 #if CDS_COMPILER_VERSION < 30300
14 # error "Compiler version error. Clang version 3.3.0 and above is supported"
18 #if defined(_LIBCPP_VERSION) && !defined(CDS_USE_BOOST_ATOMIC)
19 // Note: Clang libc++ atomic leads to program crash.
20 // So, we use libcds atomic implementation
21 # define CDS_USE_LIBCDS_ATOMIC
24 #include <cds/compiler/gcc/compiler_macro.h>
26 #define alignof __alignof__
28 // Variadic template support (only if -std=c++0x compile-line option provided)
29 #define CDS_CXX11_VARIADIC_TEMPLATE_SUPPORT
31 // Default template arguments for function templates
32 #define CDS_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS_SUPPORT
34 // C++11 delete definition ( function declaration = delete)
35 #define CDS_CXX11_DELETE_DEFINITION_SUPPORT
37 // C++11 explicitly-defaulted function (= default) [std 8.4.2 [dcl.fct.def.default]]
38 #define CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT
40 // C++11 inline namespace
41 #define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
44 #define CDS_CXX11_LAMBDA_SUPPORT
47 #define CDS_RVALUE_SUPPORT
48 #define CDS_MOVE_SEMANTICS_SUPPORT
50 #define CDS_CONSTEXPR constexpr
51 #define CDS_CONSTEXPR_CONST constexpr const
53 #define CDS_NOEXCEPT_SUPPORT noexcept
54 #define CDS_NOEXCEPT_SUPPORT_(expr) noexcept(expr)
56 // C++11 thread_local keyword
57 #define CDS_CXX11_THREAD_LOCAL_SUPPORT
59 // Full SFINAE support
60 #define CDS_CXX11_SFINAE
62 // *************************************************
65 #define CDS_TYPE_ALIGNMENT(n) __attribute__ ((aligned (n)))
66 #define CDS_CLASS_ALIGNMENT(n) __attribute__ ((aligned (n)))
67 #define CDS_DATA_ALIGNMENT(n) __attribute__ ((aligned (n)))
70 #include <cds/compiler/gcc/compiler_barriers.h>
72 #endif // #ifndef __CDS_COMPILER_GCC_DEFS_H