| // RUN: %clang_cc1 -std=c++11 %s -verify |
| // expected-no-diagnostics |
| |
| struct Value { |
| constexpr Value(int n) : n(n) {} |
| constexpr operator short() const { return n; } |
| int n; |
| }; |
| enum E { E0, E1 }; |
| struct Alt { |
| constexpr operator E() const { return E0; } |
| }; |
| |
| constexpr short s = Alt(); |
| |
| void test(Value v) { |
| switch (v) { |
| case Alt(): |
| case E1: |
| case Value(2): |
| case 3: |
| break; |
| } |
| switch (Alt a = Alt()) { |
| case Alt(): |
| case E1: |
| case Value(2): |
| case 3: |
| break; |
| } |
| switch (E0) { |
| case Alt(): |
| case E1: |
| // FIXME: These should produce a warning that 2 and 3 are not values of the |
| // enumeration. |
| case Value(2): |
| case 3: |
| break; |
| } |
| } |