From 316551f079a182d15c0e9b930c361428c968b5ee Mon Sep 17 00:00:00 2001
From: Douglas Gregor
Date: Tue, 10 Apr 2012 20:00:33 +0000
Subject: [PATCH] Add a query macro for C++11 N3276, decltype does not require
complete return types, from Michel Morin!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154428 91177308-0d34-0410-b5e6-96231b3b80d8
---
docs/LanguageExtensions.html | 6 +++++-
lib/Lex/PPMacroExpansion.cpp | 1 +
test/Lexer/has_feature_cxx0x.cpp | 10 ++++++++++
www/cxx_status.html | 5 +++++
4 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/docs/LanguageExtensions.html b/docs/LanguageExtensions.html
index 40145a4739..9da30b9c0d 100644
--- a/docs/LanguageExtensions.html
+++ b/docs/LanguageExtensions.html
@@ -767,7 +767,11 @@ enabled.
Use __has_feature(cxx_decltype) or
__has_extension(cxx_decltype) to determine if support for the
-decltype() specifier is enabled.
+decltype() specifier is enabled. C++11's decltype
+does not require type-completeness of a function call expression.
+Use __has_feature(cxx_decltype_incomplete_return_types)
+or __has_extension(cxx_decltype_incomplete_return_types)
+to determine if support for this feature is enabled.
C++11 default template arguments in function templates
diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp
index 295e9d05a6..fe7058570e 100644
--- a/lib/Lex/PPMacroExpansion.cpp
+++ b/lib/Lex/PPMacroExpansion.cpp
@@ -649,6 +649,7 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
.Case("cxx_auto_type", LangOpts.CPlusPlus0x)
.Case("cxx_constexpr", LangOpts.CPlusPlus0x)
.Case("cxx_decltype", LangOpts.CPlusPlus0x)
+ .Case("cxx_decltype_incomplete_return_types", LangOpts.CPlusPlus0x)
.Case("cxx_default_function_template_args", LangOpts.CPlusPlus0x)
.Case("cxx_defaulted_functions", LangOpts.CPlusPlus0x)
.Case("cxx_delegating_constructors", LangOpts.CPlusPlus0x)
diff --git a/test/Lexer/has_feature_cxx0x.cpp b/test/Lexer/has_feature_cxx0x.cpp
index 30e150bcb6..8e0222dcec 100644
--- a/test/Lexer/has_feature_cxx0x.cpp
+++ b/test/Lexer/has_feature_cxx0x.cpp
@@ -40,6 +40,16 @@ int no_decltype();
// CHECK-NO-0X: no_decltype
+#if __has_feature(cxx_decltype_incomplete_return_types)
+int has_decltype_incomplete_return_types();
+#else
+int no_decltype_incomplete_return_types();
+#endif
+
+// CHECK-0X: has_decltype_incomplete_return_types
+// CHECK-NO-0X: no_decltype_incomplete_return_types
+
+
#if __has_feature(cxx_auto_type)
int has_auto_type();
#else
diff --git a/www/cxx_status.html b/www/cxx_status.html
index 8305b73ec6..439044af76 100644
--- a/www/cxx_status.html
+++ b/www/cxx_status.html
@@ -119,6 +119,11 @@ with clang; other versions have not been tested.
N2343 |
Clang 2.9 |
+
+ Incomplete return types |
+ N3276 |
+ SVN |
+
Right angle brackets |
N1757 |
--
2.40.0