diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-01-26 21:25:54 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-01-26 21:25:54 +0000 |
commit | 56209ffed29ab82d0d65ac0d1d026fe179321afd (patch) | |
tree | 6ede8b3008801b0555ff137fd40804e5f4e2d5fe | |
parent | b145ee6cc7d7db42ca4351ff3fe91f04e86a2f67 (diff) |
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
-rw-r--r-- | docs/LanguageExtensions.html | 10 | ||||
-rw-r--r-- | lib/Lex/PPMacroExpansion.cpp | 1 | ||||
-rw-r--r-- | test/Lexer/has_feature_cxx0x.cpp | 10 |
3 files changed, 18 insertions, 3 deletions
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 { <li><a href="#cxx_lambdas">C++0x lambdas</a></li> <li><a href="#cxx_nullptr">C++0x nullptr</a></li> <li><a href="#cxx_rvalue_references">C++0x rvalue references</a></li> + <li><a href="#cxx_reference_qualified_functions">C++0x reference-qualified functions</a></li> <li><a href="#cxx_static_assert">C++0x <tt>static_assert()</tt></a></li> <li><a href="#cxx_auto_type">C++0x type inference</a></li> <li><a href="#cxx_variadic_templates">C++0x variadic templates</a></li> @@ -423,11 +424,13 @@ lambdas is enabled. clang does not currently implement this feature.</p> <tt>nullptr</tt> is enabled. clang does not yet fully implement this feature.</p> +<h3 id="cxx_reference_qualified_functions">C++0x reference-qualified functions</h3> +<p>Use <tt>__has_feature(cxx_reference_qualified_functions)</tt> to determine if support for reference-qualified functions (e.g., member functions with <code>&</code> or <code>&&</code> applied to <code>*this</code>) is enabled.</p> + <h3 id="cxx_rvalue_references">C++0x rvalue references</tt></h3> <p>Use <tt>__has_feature(cxx_rvalue_references)</tt> to determine if support for -rvalue references is enabled. clang does not yet fully implement this -feature.</p> +rvalue references is enabled. </p> <h3 id="cxx_static_assert">C++0x <tt>static_assert()</tt></h3> @@ -438,7 +441,8 @@ compile-time assertions using <tt>static_assert</tt> is enabled.</p> <p>Use <tt>__has_feature(cxx_auto_type)</tt> to determine C++0x type inference is supported using the <tt>auto</tt> specifier. If this is disabled, -<tt>auto</tt> will instead be a storage class specifier, as in C or C++98.</p> +<tt>auto</tt> will instead be a storage class specifier, as in C or C++98. +Clang does not currently implement this feature.</p> <h3 id="cxx_variadic_templates">C++0x variadic templates</h3> 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 + |