re PR c++/58910 (std::Tuple_impl is non constexpr when using identical userdefined...
authorPaolo Carlini <paolo.carlini@oracle.com>
Wed, 25 Nov 2015 10:00:02 +0000 (10:00 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 25 Nov 2015 10:00:02 +0000 (10:00 +0000)
2015-11-25  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/58910
* g++.dg/cpp0x/constexpr-tuple2.C: New.

From-SVN: r230860

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/constexpr-tuple2.C [new file with mode: 0644]

index a1bbe87..789058a 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-25  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/58910
+       * g++.dg/cpp0x/constexpr-tuple2.C: New.
+
 2015-11-25  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        PR rtl-optimization/68435
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-tuple2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-tuple2.C
new file mode 100644 (file)
index 0000000..10b09b6
--- /dev/null
@@ -0,0 +1,20 @@
+// PR c++/58910
+// { dg-do compile { target c++11 } }
+
+#include <tuple>
+
+using namespace std;
+struct t1{ constexpr t1(){} };
+struct t2{ constexpr t2(){} };
+
+int main()
+{
+  constexpr t1 T1;
+  constexpr t2 T2;
+  constexpr tuple<t1,t2> Tup1(T1,T2);
+  constexpr tuple<t1,t1> Tup2(T1,T1);
+  constexpr auto a=get<0>(Tup1 ); //works fine
+  constexpr auto b=get<0>(Tup2 ); // error: 
+  //'(const std::_Head_base<0ul, t1, true>*)(& Tup2)' 
+  //is not a constant expression constexpr auto b=get<0>(Tup2 );
+}