11f3810623fc7adbff149585a49a3f174dafdea81Douglas Gregor// RUN: %clang_cc1 -std=c++98 -fsyntax-only -verify %s
21f3810623fc7adbff149585a49a3f174dafdea81Douglas Gregor
3b3df1386680b3830d2f4d300d4d7eaba134135fcDouglas Gregorinline namespace N { // expected-warning{{inline namespaces are a C++11 feature}}
41f3810623fc7adbff149585a49a3f174dafdea81Douglas Gregorstruct X {
5b3df1386680b3830d2f4d300d4d7eaba134135fcDouglas Gregor  template<typename ...Args> // expected-warning{{variadic templates are a C++11 extension}}
6b3df1386680b3830d2f4d300d4d7eaba134135fcDouglas Gregor  void f(Args &&...) &; // expected-warning{{rvalue references are a C++11 extension}} \
7b3df1386680b3830d2f4d300d4d7eaba134135fcDouglas Gregor  // expected-warning{{reference qualifiers on functions are a C++11 extension}}
81f3810623fc7adbff149585a49a3f174dafdea81Douglas Gregor};
91f3810623fc7adbff149585a49a3f174dafdea81Douglas Gregor}
101f3810623fc7adbff149585a49a3f174dafdea81Douglas Gregor
11d60feeb90a4278dfb875fece6587e4c5c1198a60Richard Smithstruct B {
12d60feeb90a4278dfb875fece6587e4c5c1198a60Richard Smith  virtual void f();
13d60feeb90a4278dfb875fece6587e4c5c1198a60Richard Smith  virtual void g();
14d60feeb90a4278dfb875fece6587e4c5c1198a60Richard Smith};
15d7c56e1114bfe7d461786903bb720d2c6efc05a1Richard Smithstruct D final : B { // expected-warning {{'final' keyword is a C++11 extension}}
16d7c56e1114bfe7d461786903bb720d2c6efc05a1Richard Smith  virtual void f() override; // expected-warning {{'override' keyword is a C++11 extension}}
17d7c56e1114bfe7d461786903bb720d2c6efc05a1Richard Smith  virtual void g() final; // expected-warning {{'final' keyword is a C++11 extension}}
18d60feeb90a4278dfb875fece6587e4c5c1198a60Richard Smith};
1995fa252f180296c911d855660dcafd6bfee22180Richard Smith
2095fa252f180296c911d855660dcafd6bfee22180Richard Smithvoid NewBracedInitList() {
2195fa252f180296c911d855660dcafd6bfee22180Richard Smith  // A warning on this would be sufficient once we can handle it correctly.
2295fa252f180296c911d855660dcafd6bfee22180Richard Smith  new int {}; // expected-error {{}}
2395fa252f180296c911d855660dcafd6bfee22180Richard Smith}
24b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith
25b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smithstruct Auto {
26b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith  static int n;
27b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith};
28b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smithauto Auto::n = 0; // expected-warning {{'auto' type specifier is a C++11 extension}}
29b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smithauto Auto::m = 0; // expected-error {{no member named 'm' in 'Auto'}}
30b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith                  // expected-warning@-1 {{'auto' type specifier is a C++11 extension}}
31176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct Conv { template<typename T> operator T(); };
33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesbool pr21367_a = new int && false;
34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesbool pr21367_b = &Conv::operator int && false;
35