diff options
Diffstat (limited to 'test/CXX/conv/conv.prom/p4.cpp')
-rw-r--r-- | test/CXX/conv/conv.prom/p4.cpp | 19 |
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'}} +}; |