From 1776ea926ad579a7e8e6a9e0847160f6af25b4f0 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Tue, 1 May 2018 16:46:05 +0000 Subject: [PATCH] Support: assume `std::is_final` with MSVC According to MSDN, Visual Studio 2015 included support for std::is_final. Additionally, a bug in the Visual Studio compiler results in the incorrect definition of __cplusplus. Due to the conditions in the else case not holding either, we end up with no definition of LLVM_IS_FINAL when building with MSVC. This has not yet been a problem with LLVM/clang, however, the uses of LLVM_IS_FINAL is more prevalent in swift, which uses the ADT library and causes issues when building lldb with Visual Studio. Workaround the issue by always assuming that the definition of std::is_final is available with Visual Studio. Since we currently require VS 2015+ for building LLVM, this condition should always hold for the users in LLVM/clang (and for swift). llvm-svn: 331282 --- llvm/include/llvm/Support/type_traits.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/include/llvm/Support/type_traits.h b/llvm/include/llvm/Support/type_traits.h index 794699b..534a065 100644 --- a/llvm/include/llvm/Support/type_traits.h +++ b/llvm/include/llvm/Support/type_traits.h @@ -109,7 +109,7 @@ struct const_pointer_or_const_ref< // If the compiler supports detecting whether a class is final, define // an LLVM_IS_FINAL macro. If it cannot be defined properly, this // macro will be left undefined. -#if __cplusplus >= 201402L +#if __cplusplus >= 201402L || defined(_MSC_VER) #define LLVM_IS_FINAL(Ty) std::is_final() #elif __has_feature(is_final) || LLVM_GNUC_PREREQ(4, 7, 0) #define LLVM_IS_FINAL(Ty) __is_final(Ty) -- 2.7.4