diff options
Diffstat (limited to 'gcc-4.8/gcc/testsuite/g++.dg/cpp0x')
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 "" } +} |