summaryrefslogtreecommitdiff
path: root/test/CXX/conv/conv.prom/p4.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/CXX/conv/conv.prom/p4.cpp')
-rw-r--r--test/CXX/conv/conv.prom/p4.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/test/CXX/conv/conv.prom/p4.cpp b/test/CXX/conv/conv.prom/p4.cpp
index 02a91cd521b4..8c86d2a1838d 100644
--- a/test/CXX/conv/conv.prom/p4.cpp
+++ b/test/CXX/conv/conv.prom/p4.cpp
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++0x %s
+// expected-no-diagnostics
enum X : short { A, B };
extern decltype(+A) x;
@@ -7,3 +8,21 @@ extern int x;
enum Y : long { C, D };
extern decltype(+C) y;
extern long y;
+
+// An enum with a fixed underlying type has an integral promotion to that type,
+// and to its promoted type.
+enum B : bool { false_, true_ };
+template<bool> struct T {};
+T<false_> f;
+T<true_> t;
+// FIXME: DR1407 will make this ill-formed
+T<+true_> q; // desired-error {{conversion from 'int' to 'bool'}}
+
+enum B2 : bool {
+ a = false,
+ b = true,
+ c = false_,
+ d = true_,
+ // FIXME: DR1407 will make this ill-formed
+ e = +false_ // desired-error {{conversion from 'int' to 'bool'}}
+};