Add a query macro for C++11 N3276, decltype does not require complete

return types, from Michel Morin!

llvm-svn: 154428
This commit is contained in:
Douglas Gregor 2012-04-10 20:00:33 +00:00
parent f7345b027a
commit 0598962a7b
4 changed files with 21 additions and 1 deletions

View File

@ -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>

View File

@ -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)

View File

@ -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

View File

@ -119,6 +119,11 @@ with clang; other versions have not been tested.</p>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf">N2343</a></td>
<td class="full" align="center">Clang 2.9</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;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>