xref: /llvm-project/clang/test/CXX/expr/expr.post/expr.static.cast/p9-0x.cpp (revision c6e68daac0fa6e77a89f3ca72f266a528503dd1c)
19ca5c425SRichard Smith // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
2*c6e68daaSAndy Gibbs // expected-no-diagnostics
3b327eac1SDouglas Gregor 
4b327eac1SDouglas Gregor enum class EC { ec1 };
5b327eac1SDouglas Gregor 
test0(EC ec)6b327eac1SDouglas Gregor void test0(EC ec) {
7b327eac1SDouglas Gregor   (void)static_cast<bool>(ec);
8b327eac1SDouglas Gregor   (void)static_cast<bool>(EC::ec1);
9b327eac1SDouglas Gregor   (void)static_cast<char>(ec);
10b327eac1SDouglas Gregor   (void)static_cast<char>(EC::ec1);
11b327eac1SDouglas Gregor   (void)static_cast<int>(ec);
12b327eac1SDouglas Gregor   (void)static_cast<int>(EC::ec1);
13b327eac1SDouglas Gregor   (void)static_cast<unsigned long>(ec);
14b327eac1SDouglas Gregor   (void)static_cast<unsigned long>(EC::ec1);
15b327eac1SDouglas Gregor   (void)static_cast<float>(ec);
16b327eac1SDouglas Gregor   (void)static_cast<float>(EC::ec1);
17b327eac1SDouglas Gregor   (void)static_cast<double>(ec);
18b327eac1SDouglas Gregor   (void)static_cast<double>(EC::ec1);
19b327eac1SDouglas Gregor }
20b327eac1SDouglas Gregor 
21b327eac1SDouglas Gregor namespace PR9107 {
22b327eac1SDouglas Gregor   enum E {};
addressof(_Tp & __x)23b327eac1SDouglas Gregor   template <class _Tp> inline _Tp* addressof(_Tp& __x) {
24b327eac1SDouglas Gregor     return (_Tp*)&(char&)__x;
25b327eac1SDouglas Gregor   }
test()26b327eac1SDouglas Gregor   void test() {
27b327eac1SDouglas Gregor     E a;
28b327eac1SDouglas Gregor     addressof(a);
29b327eac1SDouglas Gregor   }
30b327eac1SDouglas Gregor }
31