"%0 declared as a reference to a reference">;
def ext_rvalue_reference : ExtWarn<
"rvalue references are a C++0x extension">, InGroup<CXX0x>;
+def ext_ref_qualifier : ExtWarn<
+ "reference qualifiers on functions are a C++0x extension">, InGroup<CXX0x>;
def ext_inline_namespace : ExtWarn<
"inline namespaces are a C++0x feature">, InGroup<CXX0x>;
def err_argument_required_after_attribute : Error<
// Parse ref-qualifier[opt]
if (Tok.is(tok::amp) || Tok.is(tok::ampamp)) {
if (!getLang().CPlusPlus0x)
- Diag(Tok, diag::ext_rvalue_reference);
+ Diag(Tok, diag::ext_ref_qualifier);
RefQualifierIsLValueRef = Tok.is(tok::amp);
RefQualifierLoc = ConsumeToken();
// Parse ref-qualifier[opt]
if (Tok.is(tok::amp) || Tok.is(tok::ampamp)) {
if (!getLang().CPlusPlus0x)
- Diag(Tok, diag::ext_rvalue_reference);
+ Diag(Tok, diag::ext_ref_qualifier);
RefQualifierIsLValueRef = Tok.is(tok::amp);
RefQualifierLoc = ConsumeToken();
--- /dev/null
+// RUN: %clang_cc1 -std=c++98 -fsyntax-only -verify %s
+
+inline namespace N { // expected-warning{{inline namespaces are a C++0x feature}}
+struct X {
+ template<typename ...Args> // expected-warning{{variadic templates are a C++0x extension}}
+ void f(Args &&...) &; // expected-warning{{rvalue references are a C++0x extension}} \
+ // expected-warning{{reference qualifiers on functions are a C++0x extension}}
+};
+}
+