// RUN: %clang_cc1 %s -fsyntax-only -verify -fms-extensions -fexceptions // ::type_info is predeclared with forward class declartion void f(const type_info &a); // The following three are all equivalent when ms-extensions are on void foo() throw(int); void foo() throw(int, long); void foo() throw(...); void foo(); // expected-note {{previous declaration}} // Only nothrow specification is treated specially. void foo() throw(); // expected-error {{exception specification in declaration does not match previous declaration}} // throw(...) void r3(); void r3() throw(...); void r6() throw(...); void r6() throw(int); // okay struct Base { virtual void f2(); virtual void f3() throw(...); }; struct Derived : Base { virtual void f2() throw(...); virtual void f3(); }; // __stdcall handling struct M { int __stdcall addP(); float __stdcall subtractP(); }; template void h1(T (__stdcall M::* const )()) { } void m1() { h1(&M::addP); h1(&M::subtractP); }