diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-04-10 20:00:33 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-04-10 20:00:33 +0000 |
commit | 316551f079a182d15c0e9b930c361428c968b5ee (patch) | |
tree | 58b3621cc1abfd33e42c9aa14278e9737fecca06 | |
parent | 50fadd19497f5fa6d8737786ba74af8354d28349 (diff) |
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
-rw-r--r-- | docs/LanguageExtensions.html | 6 | ||||
-rw-r--r-- | lib/Lex/PPMacroExpansion.cpp | 1 | ||||
-rw-r--r-- | test/Lexer/has_feature_cxx0x.cpp | 10 | ||||
-rw-r--r-- | www/cxx_status.html | 5 |
4 files changed, 21 insertions, 1 deletions
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.</p> <p>Use <tt>__has_feature(cxx_decltype)</tt> or <tt>__has_extension(cxx_decltype)</tt> to determine if support for the -<tt>decltype()</tt> specifier is enabled.</p> +<tt>decltype()</tt> specifier is enabled. C++11's <tt>decltype</tt> +does not require type-completeness of a function call expression. +Use <tt>__has_feature(cxx_decltype_incomplete_return_types)</tt> +or <tt>__has_extension(cxx_decltype_incomplete_return_types)</tt> +to determine if support for this feature is enabled.</p> <h4 id="cxx_default_function_template_args">C++11 default template arguments in function templates</h4> 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 @@ -120,6 +120,11 @@ with clang; other versions have not been tested.</p> <td class="full" align="center">Clang 2.9</td> </tr> <tr> + <td> Incomplete return types</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf">N3276</a></td> + <td class="svn" align="center">SVN</td> + </tr> + <tr> <td>Right angle brackets</td> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html">N1757</a></td> <td class="full" align="center">Clang 2.9</td> |