aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8/gcc/testsuite/g++.dg/cpp0x
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8/gcc/testsuite/g++.dg/cpp0x')
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/access02.C39
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C18
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto42.C9
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C20
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype57.C8
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted48.C17
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/deleted3.C11
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum_base2.C9
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist76.C5
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist78.C12
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist79.C8
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist81.C25
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist82.C20
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C7
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept22.C21
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C10
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C13
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/static_assert9.C7
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic144.C15
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic145.C13
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic147.C10
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic148.C6
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic149.C11
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic150.C9
24 files changed, 323 insertions, 0 deletions
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/access02.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/access02.C
new file mode 100644
index 000000000..74960a66a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/access02.C
@@ -0,0 +1,39 @@
+// PR c++/58954
+// { dg-require-effective-target c++11 }
+
+template<class T>
+T&& declval();
+
+template<class T>
+struct foo_argument
+{
+ template<class Ret, class C, class Arg>
+ static Arg test(Ret (C::*)(Arg));
+
+ typedef decltype(test(&T::template foo<>)) type;
+};
+
+template<class T, class>
+struct dependent { typedef T type; };
+
+template<class T>
+struct base
+{
+ template<class Ignore = void>
+ auto foo(int i) -> decltype(declval<
+ typename dependent<T&, Ignore>::type
+ >().foo_impl(i));
+};
+
+struct derived : base<derived>
+{
+ friend struct base<derived>;
+private:
+ int foo_impl(int i);
+};
+
+int main()
+{
+ foo_argument<derived>::type var = 0;
+ return var;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
new file mode 100644
index 000000000..c444217b0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
@@ -0,0 +1,18 @@
+// PR c++/60182
+// { dg-require-effective-target c++11 }
+
+class B {};
+template <typename> using __allocator_base = B;
+template <typename> class F : __allocator_base<int> {};
+class C {};
+template <typename, typename = F<int> > class G : C {};
+template <typename> class D;
+class A {
+ using Container = G<D<char>>;
+ A();
+ A(D<char> const &);
+ Container m_elements;
+};
+template <template <class, class> class C, class A = F<D<int>>>
+void doSomething(C<D<char>, A> &);
+A::A(D<char> const &) : A() { doSomething(m_elements); }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto42.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto42.C
new file mode 100644
index 000000000..fea4c28d8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto42.C
@@ -0,0 +1,9 @@
+// PR c++/60628
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+void foo(int i)
+{
+ auto x[1] = { 0 }; // { dg-error "array of .auto" }
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
new file mode 100644
index 000000000..eac6004ae
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
@@ -0,0 +1,20 @@
+// PR c++/59268
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+
+template <typename>
+struct A
+{
+ constexpr A (int) {}
+ virtual void foo ()
+ {
+ constexpr A<void> a (0);
+ }
+};
+
+void
+bar ()
+{
+ A<int> a (3);
+ a.foo ();
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype57.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype57.C
new file mode 100644
index 000000000..353cc72c3
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype57.C
@@ -0,0 +1,8 @@
+// PR c++/58633
+// { dg-do compile { target c++11 } }
+
+void foo(int i)
+{
+ typedef int I;
+ decltype(i.I::~I())* p;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted48.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted48.C
new file mode 100644
index 000000000..727afc5ca
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted48.C
@@ -0,0 +1,17 @@
+// PR c++/60108
+// { dg-require-effective-target c++11 }
+
+template<int> struct A
+{
+ virtual ~A();
+};
+
+template<typename> struct B : A<0>, A<1>
+{
+ ~B() = default;
+};
+
+struct C : B<bool>
+{
+ C() {}
+};
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/deleted3.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/deleted3.C
new file mode 100644
index 000000000..67836773a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/deleted3.C
@@ -0,0 +1,11 @@
+// PR c++/60216
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ template<typename T> A(T) = delete;
+};
+
+template<> A::A<int>(int) {}
+
+A a(0);
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum_base2.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum_base2.C
new file mode 100644
index 000000000..8c6a9011d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum_base2.C
@@ -0,0 +1,9 @@
+// PR c++/60187
+// { dg-require-effective-target c++11 }
+
+template<typename... T> struct A
+{
+ enum E : T {}; // { dg-error "parameter pack" }
+};
+
+A<int> a;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist76.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist76.C
new file mode 100644
index 000000000..ac419dde8
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist76.C
@@ -0,0 +1,5 @@
+// PR c++/58812
+// { dg-require-effective-target c++11 }
+
+int i;
+int&& j{{ i }}; // { dg-error "too many braces" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist78.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist78.C
new file mode 100644
index 000000000..648ec5307
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist78.C
@@ -0,0 +1,12 @@
+// PR c++/58639
+// { dg-require-effective-target c++11 }
+
+struct node {
+ node &parent;
+};
+
+struct vector {
+ node n;
+};
+
+vector v({}); // { dg-error "" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist79.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist79.C
new file mode 100644
index 000000000..5a1914dda
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist79.C
@@ -0,0 +1,8 @@
+// PR c++/59646
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+struct A {};
+
+std::initializer_list<volatile A> x = {{}};
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist81.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist81.C
new file mode 100644
index 000000000..5978c6388
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist81.C
@@ -0,0 +1,25 @@
+// PR c++/60713
+// { dg-options "-O" }
+// { dg-do compile { target c++11 } }
+
+template < class x0, class x1, class x2, class x3, class x4 >
+int *x5 (x0 *, x2 (x1::*)(x3, x4));
+
+class x6
+{
+ void x7 ();
+ struct x8
+ {
+ int *x9;
+ };
+ void x10 (x8);
+ void x11 (int *, int *);
+};
+
+void
+x6::x7 ()
+{
+ x10 ({
+ x5 (this, &x6::x11)
+ });
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist82.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist82.C
new file mode 100644
index 000000000..3b9ccad66
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist82.C
@@ -0,0 +1,20 @@
+// PR c++/60708
+// { dg-do compile { target c++11 } }
+
+template <class T, class U> struct mypair {
+ mypair(T, U) {}
+};
+
+template<typename T> struct S {
+ mypair<T *, int> get_pair() noexcept {
+ return mypair<T*,int>(nullptr, 0);
+ }
+};
+
+static void foo(const mypair<char *, int> (&a)[2]) noexcept { }
+
+int main()
+{
+ S<char> s;
+ foo({s.get_pair(), s.get_pair()});
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
new file mode 100644
index 000000000..1d2778fb5
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
@@ -0,0 +1,7 @@
+// PR c++/58596
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i = [] { return decltype(i)(); }();
+};
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept22.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept22.C
new file mode 100644
index 000000000..7aab0f43c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept22.C
@@ -0,0 +1,21 @@
+// PR c++/60046
+// { dg-require-effective-target c++11 }
+
+constexpr bool foo () { return noexcept (true); }
+template <typename T>
+struct V
+{
+ void bar (V &) noexcept (foo ()) {}
+};
+template <typename T>
+struct W : public V <int>
+{
+ void bar (W &x) { V <int>::bar (x); }
+};
+
+int
+main ()
+{
+ W <int> a, b;
+ a.bar (b);
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
new file mode 100644
index 000000000..35f6509df
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
@@ -0,0 +1,10 @@
+// PR c++/58965
+// { dg-require-effective-target c++11 }
+
+void foo()
+{
+ static union
+ {
+ int i = i;
+ };
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
new file mode 100644
index 000000000..febe0ecac
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
@@ -0,0 +1,13 @@
+// PR c++/58162
+// { dg-require-effective-target c++11 }
+
+struct A {
+ A();
+ A(A&&);
+};
+
+struct B {
+ A const a = A();
+};
+
+B b;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/static_assert9.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/static_assert9.C
new file mode 100644
index 000000000..fccaa449c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/static_assert9.C
@@ -0,0 +1,7 @@
+// PR c++/58837
+// { dg-require-effective-target c++11 }
+
+void f();
+static_assert(f, "");
+struct A {};
+static_assert(A::~A, ""); // { dg-error "non-static member function" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic144.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic144.C
new file mode 100644
index 000000000..5d05d3d52
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic144.C
@@ -0,0 +1,15 @@
+// PR c++/56060
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct baz { };
+template<typename T> T bar();
+
+template<typename T, typename ... U>
+baz<decltype(bar<T>()(bar<U> ...))> // { dg-error "cannot be used" }
+foo();
+
+int main()
+{
+ foo<int>(); // { dg-error "no matching" }
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic145.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic145.C
new file mode 100644
index 000000000..65edda59f
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic145.C
@@ -0,0 +1,13 @@
+// PR c++/59730
+// { dg-do compile { target c++11 } }
+
+template <typename> void declval();
+template <typename> void forward();
+template <typename> class D;
+template <typename _Functor, typename... _Bound_args>
+class D <_Functor(_Bound_args...)> {
+ template <typename... _Args, decltype(declval<_Functor>)>
+ void operator()(...) {
+ 0(forward<_Args>...);
+ }
+};
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic147.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic147.C
new file mode 100644
index 000000000..7f606d84a
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic147.C
@@ -0,0 +1,10 @@
+// PR c++/58466
+// { dg-require-effective-target c++11 }
+
+template<char, char...> struct A;
+
+template<typename> struct B;
+
+template<char... C> struct B<A<C...>> {};
+
+B<A<'X'>> b;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic148.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic148.C
new file mode 100644
index 000000000..a4ee63533
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic148.C
@@ -0,0 +1,6 @@
+// PR c++/59989
+// { dg-require-effective-target c++11 }
+
+template<typename T> struct X {};
+template<template<typename...> class D, typename ...U> int test(D<U...>*);
+int n = test<X, int>(0); // { dg-error "no match" }
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic149.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic149.C
new file mode 100644
index 000000000..a250e7c29
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic149.C
@@ -0,0 +1,11 @@
+// PR c++/60248
+// { dg-options "-std=c++11 -g -fabi-version=2" }
+
+template<int...> struct A {};
+
+template<> struct A<0>
+{
+ typedef enum { e } B;
+};
+
+A<0> a;
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic150.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic150.C
new file mode 100644
index 000000000..6a30efed9
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic150.C
@@ -0,0 +1,9 @@
+// PR c++/60219
+// { dg-require-effective-target c++11 }
+
+template<typename..., int> void foo();
+
+void bar()
+{
+ foo<0>; // { dg-error "" }
+}