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