diff gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,35 @@
+// PR c++/56728
+// { dg-require-effective-target c++11 }
+
+class B {
+public:
+  static B instance;
+  class Inner
+  {
+  public:
+    class Wuzi
+    {
+      unsigned int m;
+    } m_Class[3];
+    unsigned m_Int[4];
+  };
+
+  constexpr static Inner & getInner()
+  /* I am surprised this is considered a constexpr */
+  { return *((Inner *)4); } // { dg-error "reinterpret_cast" }
+};
+
+B B::instance;
+
+class A
+{
+public:
+  constexpr A(B &bridge, B::Inner &bridge2, unsigned char index)
+    : m_Bridge(bridge), m_Wuz(bridge2.m_Class[index])
+  {}
+
+  B &m_Bridge;
+  B::Inner::Wuzi &m_Wuz;
+};
+A works{B::instance, B::getInner(), 3};
+A crashnkill[1]{{B::instance, B::getInner(), 3}};