From: Douglas Gregor
Date: Wed, 26 Jan 2011 21:25:54 +0000 (+0000)
Subject: Add __has_feature(cxx_reference_qualified_functions); update tests and
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=56209ffed29ab82d0d65ac0d1d026fe179321afd;p=clang
Add __has_feature(cxx_reference_qualified_functions); update tests and
documentation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124322 91177308-0d34-0410-b5e6-96231b3b80d8
---
diff --git a/docs/LanguageExtensions.html b/docs/LanguageExtensions.html
index 06b01db760..b2b3f3cde6 100644
--- a/docs/LanguageExtensions.html
+++ b/docs/LanguageExtensions.html
@@ -39,6 +39,7 @@ td {
C++0x lambdas
C++0x nullptr
C++0x rvalue references
+ C++0x reference-qualified functions
C++0x static_assert()
C++0x type inference
C++0x variadic templates
@@ -423,11 +424,13 @@ lambdas is enabled. clang does not currently implement this feature.
nullptr is enabled. clang does not yet fully implement this
feature.
+C++0x reference-qualified functions
+Use __has_feature(cxx_reference_qualified_functions) to determine if support for reference-qualified functions (e.g., member functions with &
or &&
applied to *this
) is enabled.
+
C++0x rvalue references
Use __has_feature(cxx_rvalue_references) to determine if support for
-rvalue references is enabled. clang does not yet fully implement this
-feature.
+rvalue references is enabled.
C++0x static_assert()
@@ -438,7 +441,8 @@ compile-time assertions using static_assert is enabled.
Use __has_feature(cxx_auto_type) to determine C++0x type inference
is supported using the auto specifier. If this is disabled,
-auto will instead be a storage class specifier, as in C or C++98.
+auto will instead be a storage class specifier, as in C or C++98.
+Clang does not currently implement this feature.
C++0x variadic templates
diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp
index 47a35bd153..7727eafd73 100644
--- a/lib/Lex/PPMacroExpansion.cpp
+++ b/lib/Lex/PPMacroExpansion.cpp
@@ -556,6 +556,7 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
.Case("cxx_inline_namespaces", LangOpts.CPlusPlus0x)
//.Case("cxx_lambdas", false)
//.Case("cxx_nullptr", false)
+ .Case("cxx_reference_qualified_functions", LangOpts.CPlusPlus0x)
.Case("cxx_rvalue_references", LangOpts.CPlusPlus0x)
.Case("cxx_strong_enums", LangOpts.CPlusPlus0x)
.Case("cxx_static_assert", LangOpts.CPlusPlus0x)
diff --git a/test/Lexer/has_feature_cxx0x.cpp b/test/Lexer/has_feature_cxx0x.cpp
index 46de712210..2944ae374c 100644
--- a/test/Lexer/has_feature_cxx0x.cpp
+++ b/test/Lexer/has_feature_cxx0x.cpp
@@ -99,3 +99,13 @@ int no_inline_namespaces();
// CHECK-0X: has_inline_namespaces
// CHECK-NO-0X: no_inline_namespaces
+
+#if __has_feature(cxx_reference_qualified_functions)
+int has_reference_qualified_functions();
+#else
+int no_reference_qualified_functions();
+#endif
+
+// CHECK-0X: has_reference_qualified_functions
+// CHECK-NO-0X: no_reference_qualified_functions
+