// RUN: %clang_cc1 %s -triple i686-pc-win32 -fsyntax-only -std=c++11 -Wmicrosoft -verify -fms-compatibility -fexceptions -fcxx-exceptions -fms-compatibility-version=19.28
// RUN: %clang_cc1 %s -triple i686-pc-win32 -fsyntax-only -std=c++11 -Wmicrosoft -verify -fms-compatibility -fexceptions -fcxx-exceptions -fms-compatibility-version=19.27
// RUN: %clang_cc1 %s -triple i686-pc-win32 -fsyntax-only -std=c++11 -Wmicrosoft -verify -fms-compatibility -fexceptions -fcxx-exceptions -fms-compatibility-version=19.00
// RUN: %clang_cc1 %s -triple i686-pc-win32 -fsyntax-only -std=c++11 -Wmicrosoft -verify -fms-compatibility -fexceptions -fcxx-exceptions -fms-compatibility-version=18.00
// RUN: %clang_cc1 %s -triple i686-pc-win32 -fsyntax-only -std=c++17 -Wmicrosoft -verify -fms-compatibility -fexceptions -fcxx-exceptions
char16_t x;
char32_t y;
typedef unsigned short char16_t;
typedef unsigned int char32_t;
z;
;
;
alpha;
typename decltype a; // expected-warning {{expected a qualified name after 'typename'}}
//MSVC allows forward enum declaration
; // expected-warning {{forward references to 'enum' types are a Microsoft extension}}
ENUM *var = 0;
ENUM var2 = 3;
;// expected-warning {{forward references to 'enum' types are a Microsoft extension}}
;
; // This way round is fine.
;
// Clang used to complain that NsEnumForwardDecl::E was undeclared below.
NsEnumForwardDecl::E NsEnumForwardDecl_e;
typedef void ;
void = static_cast<FnPtrTy>; // expected-warning {{static_cast between pointer-to-function and pointer-to-object is a Microsoft extension}}
void = ;
void = ;
void = reinterpret_cast<FnPtrTy>;
long ;
long ;
void
// Microsoft doesn't validate exception specification.