p2-0x.cpp revision 840462670ba7a6bc26265a2306b35f2f0f01f51c
1// RUN: %clang_cc1 -std=c++11 %s -verify
2// expected-no-diagnostics
3
4struct Value {
5  constexpr Value(int n) : n(n) {}
6  constexpr operator short() const { return n; }
7  int n;
8};
9enum E { E0, E1 };
10struct Alt {
11  constexpr operator E() const { return E0; }
12};
13
14constexpr short s = Alt();
15
16void test(Value v) {
17  switch (v) {
18    case Alt():
19    case E1:
20    case Value(2):
21    case 3:
22      break;
23  }
24  switch (Alt a = Alt()) {
25    case Alt():
26    case E1:
27    case Value(2):
28    case 3:
29      break;
30  }
31  switch (E0) {
32    case Alt():
33    case E1:
34    // FIXME: These should produce a warning that 2 and 3 are not values of the
35    // enumeration.
36    case Value(2):
37    case 3:
38      break;
39  }
40}
41