Enable deleted functions and explicit conversions in MSVC 2013
authorAlp Toker <alp@nuanti.com>
Sun, 29 Dec 2013 00:49:14 +0000 (00:49 +0000)
committerAlp Toker <alp@nuanti.com>
Sun, 29 Dec 2013 00:49:14 +0000 (00:49 +0000)
Also prospectively enable static_assert as the documentation suggests it's been
available since MSVC 2010. Let's see if the build servers agree.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198142 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Compiler.h

index 52c96da5841b4a51824c9b492d066a4be2184aba..338a700b70c46841a06b650a721827be84749e35 100644 (file)
 ///   ...
 /// };
 #if (__has_feature(cxx_deleted_functions) \
-     || defined(__GXX_EXPERIMENTAL_CXX0X__))
-     // No version of MSVC currently supports this.
+     || defined(__GXX_EXPERIMENTAL_CXX0X__)) || LLVM_MSC_PREREQ(1800)
 #define LLVM_DELETED_FUNCTION = delete
 #else
 #define LLVM_DELETED_FUNCTION
 /// \brief Expands to explicit on compilers which support explicit conversion
 /// operators. Otherwise expands to nothing.
 #if (__has_feature(cxx_explicit_conversions) \
-     || defined(__GXX_EXPERIMENTAL_CXX0X__))
+     || defined(__GXX_EXPERIMENTAL_CXX0X__)) || LLVM_MSC_PREREQ(1800)
 #define LLVM_EXPLICIT explicit
 #else
 #define LLVM_EXPLICIT
 
 /// \macro LLVM_STATIC_ASSERT
 /// \brief Expands to C/C++'s static_assert on compilers which support it.
-#if __has_feature(cxx_static_assert)
+#if __has_feature(cxx_static_assert) || LLVM_MSC_PREREQ(1600)
 # define LLVM_STATIC_ASSERT(expr, msg) static_assert(expr, msg)
 #elif __has_feature(c_static_assert)
 # define LLVM_STATIC_ASSERT(expr, msg) _Static_assert(expr, msg)