| // RUN: %clang_cc1 %s -std=c++11 -fsyntax-only -Wmicrosoft -verify -fms-extensions |
| |
| class MayExist { |
| private: |
| typedef int Type; |
| }; |
| |
| void test_if_exists_stmts() { |
| int b = 0; |
| __if_exists(MayExist::Type) { |
| b++; |
| b++; |
| } |
| __if_exists(MayExist::Type_not) { |
| this will not compile. |
| } |
| __if_not_exists(MayExist::Type) { |
| this will not compile. |
| } |
| __if_not_exists(MayExist::Type_not) { |
| b++; |
| b++; |
| } |
| } |
| |
| int if_exists_creates_no_scope() { |
| __if_exists(MayExist::Type) { |
| int x; // 'x' is declared in the parent scope. |
| } |
| __if_not_exists(MayExist::Type_not) { |
| x++; |
| } |
| return x; |
| } |
| |
| __if_exists(MayExist::Type) { |
| int var23; |
| } |
| |
| __if_exists(MayExist::Type_not) { |
| this will not compile. |
| } |
| |
| __if_not_exists(MayExist::Type) { |
| this will not compile. |
| } |
| |
| __if_not_exists(MayExist::Type_not) { |
| int var244; |
| } |
| |
| void test_if_exists_init_list() { |
| |
| int array1[] = { |
| 0, |
| __if_exists(MayExist::Type) {2, } |
| 3 |
| }; |
| |
| int array2[] = { |
| 0, |
| __if_exists(MayExist::Type_not) { this will not compile } |
| 3 |
| }; |
| |
| int array3[] = { |
| 0, |
| __if_not_exists(MayExist::Type_not) {2, } |
| 3 |
| }; |
| |
| int array4[] = { |
| 0, |
| __if_not_exists(MayExist::Type) { this will not compile } |
| 3 |
| }; |
| |
| } |
| |
| |
| class IfExistsClassScope { |
| __if_exists(MayExist::Type) { |
| // __if_exists, __if_not_exists can nest |
| __if_not_exists(MayExist::Type_not) { |
| int var123; |
| } |
| int var23; |
| } |
| |
| __if_exists(MayExist::Type_not) { |
| this will not compile. |
| } |
| |
| __if_not_exists(MayExist::Type) { |
| this will not compile. |
| } |
| |
| __if_not_exists(MayExist::Type_not) { |
| int var244; |
| } |
| }; |
| |
| void test_nested_if_exists() { |
| __if_exists(MayExist::Type) { |
| int x = 42; |
| __if_not_exists(MayExist::Type_not) { |
| x++; |
| } |
| } |
| } |
| |
| void test_attribute_on_if_exists() { |
| [[clang::fallthrough]] // expected-error {{an attribute list cannot appear here}} |
| __if_exists(MayExist::Type) { |
| int x; |
| } |
| } |