summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp0x
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x')
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto26.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype30.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum20.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/explicit6.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist52.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept13.C78
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-func2.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae26.C38
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-default.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic112.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic113.C20
15 files changed, 292 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto26.C b/gcc/testsuite/g++.dg/cpp0x/auto26.C
new file mode 100644
index 00000000000..6e55aa451ac
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto26.C
@@ -0,0 +1,21 @@
+// PR c++/43321
+// { dg-options -std=c++0x }
+
+template <class T>
+void f(T t)
+{
+ auto *p = t;
+}
+
+template <class T>
+void g(const T& tr)
+{
+ auto p = *tr;
+}
+
+int main()
+{
+ int b;
+ f(&b);
+ g(&b);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C
new file mode 100644
index 00000000000..44775c0703c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C
@@ -0,0 +1,20 @@
+// PR c++/49290
+// { dg-options -std=c++0x }
+
+typedef unsigned T;
+struct S
+{
+ constexpr T foo (void);
+ unsigned s1[16];
+};
+
+constexpr T
+S::foo ()
+{
+ return *(T *) (s1 + 10);
+}
+
+constexpr S s = { 0,1,2,3,4,5,6,7,8,9,10 };
+
+#define SA(X) static_assert ((X), #X)
+SA(s.foo() == 10);
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype30.C b/gcc/testsuite/g++.dg/cpp0x/decltype30.C
new file mode 100644
index 00000000000..b23c9a94d8f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype30.C
@@ -0,0 +1,17 @@
+// PR c++/49369
+// { dg-options -std=c++0x }
+
+template <class,class> struct assert_same;
+template <class T> struct assert_same<T,T> {};
+
+struct B {
+ int member;
+};
+
+struct C: B {
+ void method() const;
+};
+
+void C::method() const {
+ assert_same<decltype((B::member)), const int&> a;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum20.C b/gcc/testsuite/g++.dg/cpp0x/enum20.C
new file mode 100644
index 00000000000..e5dc186e4af
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/enum20.C
@@ -0,0 +1,5 @@
+// PR c++/47635
+// { dg-options -std=c++0x }
+
+enum A { };
+void A::f() { } // { dg-error "not a class" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/explicit6.C b/gcc/testsuite/g++.dg/cpp0x/explicit6.C
new file mode 100644
index 00000000000..0d620be0803
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/explicit6.C
@@ -0,0 +1,11 @@
+// PR c++/47080
+// { dg-options -std=c++0x }
+
+struct A {
+ explicit operator int(); // { dg-message "qualification conversion" }
+};
+
+int main() {
+ bool b((A())); // { dg-error "invalid user-defined" }
+ !A(); // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist52.C b/gcc/testsuite/g++.dg/cpp0x/initlist52.C
new file mode 100644
index 00000000000..22bc2873c7c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist52.C
@@ -0,0 +1,7 @@
+// PR c++/45378
+// { dg-options -std=c++0x }
+
+int main()
+{
+ int x { 22.2 }; // { dg-error "narrowing" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C
new file mode 100644
index 00000000000..1cc7bb65833
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C
@@ -0,0 +1,9 @@
+// PR c++/44160
+// { dg-options -std=c++0x }
+// { dg-do link }
+
+int main()
+{
+ const char *p = []() { return __func__; }();
+ return p == 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C
new file mode 100644
index 00000000000..51e55a7aa4c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C
@@ -0,0 +1,12 @@
+// FDIS 5.1.2/8
+// { dg-options "-pedantic-errors -std=c++0x" }
+
+struct S2 { void f(int i); };
+void S2::f(int i) {
+ [&, i]{ }; // OK
+ [&, &i]{ }; // { dg-error "" } i preceded by & when & is the default
+ [=, i]{ }; // { dg-error "" } i not preceded by & when = is the default
+ [=, this]{ }; // { dg-error "" } this when = is the default
+ [i, i]{ }; // { dg-error "" } i repeated
+ [this, this]{ }; // { dg-error "" } i repeated
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept13.C b/gcc/testsuite/g++.dg/cpp0x/noexcept13.C
new file mode 100644
index 00000000000..7d51c82b549
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept13.C
@@ -0,0 +1,78 @@
+// PR c++/49107
+// { dg-options -std=c++0x }
+
+namespace std
+{
+ template<typename _Tp> _Tp&& declval() noexcept;
+
+ struct true_type { static const bool value = true; };
+ struct false_type { static const bool value = false; };
+
+ template<typename _Tp, typename _Arg>
+ struct __is_direct_constructible_impl
+ {
+ template<typename _Tp2, typename _Arg2, typename
+ = decltype(::new _Tp2(declval<_Arg2>()))>
+ static true_type __test(int);
+
+ template<typename, typename>
+ static false_type __test(...);
+
+ typedef decltype(__test<_Tp, _Arg>(0)) type;
+ };
+
+ template<typename _Tp, typename _Arg>
+ struct __is_direct_constructible_new_safe
+ : public __is_direct_constructible_impl<_Tp, _Arg>::type
+ { };
+
+ template<class _T1, class _T2>
+ struct pair
+ {
+ pair() = default;
+ constexpr pair(const pair&) = default;
+
+ pair(pair&& __p)
+ noexcept(__is_direct_constructible_new_safe<_T2,_T2&&>::value);
+ };
+}
+
+template <class R_>
+struct Vector3
+{
+ typedef typename R_::Ray_3 Ray_3;
+ Vector3() {}
+ explicit Vector3(const Ray_3& r);
+};
+
+template < class R_ > class LineC3
+{
+ typedef typename R_::Vector_3 Vector_3;
+ std::pair<int, Vector_3> x;
+};
+
+template < class R_ > class RayH3
+{
+ typedef typename R_::Vector_3 Vector_3;
+ std::pair<int, Vector_3> x;
+};
+
+template <typename Kernel >
+struct Homogeneous_base
+{
+ typedef LineC3<Kernel> Line_3;
+ typedef RayH3<Kernel> Ray_3;
+};
+
+template < typename RT_>
+struct Simple_homogeneous
+: public Homogeneous_base< Simple_homogeneous<RT_> >
+{
+ typedef Vector3<Simple_homogeneous<RT_> > Vector_3;
+};
+
+int main()
+{
+ typedef Simple_homogeneous<double> R;
+ R::Line_3 l3;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C b/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C
new file mode 100644
index 00000000000..65aac8da2a1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C
@@ -0,0 +1,13 @@
+// PR c++/49389
+// { dg-options -std=c++0x }
+
+template<class T> T&& val();
+
+struct A {};
+
+typedef decltype(val<A>().*val<int A::*>()) type;
+
+template<class> struct assert_type;
+template<> struct assert_type<int&&> {};
+
+assert_type<type> test;
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-func2.C b/gcc/testsuite/g++.dg/cpp0x/rv-func2.C
new file mode 100644
index 00000000000..b792342dada
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-func2.C
@@ -0,0 +1,10 @@
+// PR c++/49458
+// { dg-options -std=c++0x }
+
+typedef void ftype();
+
+struct A {
+ operator ftype&(void);
+};
+
+ftype &&frvref = A();
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae26.C b/gcc/testsuite/g++.dg/cpp0x/sfinae26.C
new file mode 100644
index 00000000000..5b8cdd9f545
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae26.C
@@ -0,0 +1,38 @@
+// PR c++/49229
+// { dg-options -std=c++0x }
+
+extern void* enabler;
+
+template<bool, class = void>
+struct enable_if {};
+
+template<class T>
+struct enable_if<true, T> {
+ typedef T type;
+};
+
+template<class... Bn>
+struct and_;
+
+template<class B1>
+struct and_<B1> : B1 {};
+
+template<class, class>
+struct is_same {
+ static constexpr bool value = false;
+};
+
+template<class T>
+struct is_same<T, T> {
+ static constexpr bool value = true;
+};
+
+template<class... T>
+struct S {
+ template<class... U,
+ typename enable_if<and_<is_same<T, U>...>::value>::type*& = enabler
+ >
+ S(U...){} // #
+};
+
+S<bool> s(0); // { dg-error "no match" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-default.C b/gcc/testsuite/g++.dg/cpp0x/variadic-default.C
new file mode 100644
index 00000000000..2625e259f78
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-default.C
@@ -0,0 +1,12 @@
+// PR c++/49205
+// { dg-options -std=c++0x }
+
+#include <initializer_list>
+
+struct A {
+ template<typename ...T> A(T...);
+ A(std::initializer_list<short>);
+ A(std::initializer_list<long>);
+};
+
+A a{};
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic112.C b/gcc/testsuite/g++.dg/cpp0x/variadic112.C
new file mode 100644
index 00000000000..1640657d950
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic112.C
@@ -0,0 +1,19 @@
+// PR c++/49420
+// { dg-options -std=c++0x }
+
+struct A { };
+
+template <class T> struct B
+{
+ typedef typename T::type type ; // { dg-error "no type" }
+};
+
+template <typename Array, typename... Args>
+typename B<Array>::type
+get(const Array& a, Args... args);
+
+int main()
+{
+ A a;
+ int x = get(a, 1, 2, 3); // { dg-error "no match" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic113.C b/gcc/testsuite/g++.dg/cpp0x/variadic113.C
new file mode 100644
index 00000000000..3f1bb2ad04a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic113.C
@@ -0,0 +1,20 @@
+// PR c++/49251
+// { dg-options "-std=c++0x -Wunused-parameter" }
+
+struct A {};
+template <int> int f(A);
+
+template< int... Indices >
+struct indices {};
+
+template< class... Args >
+void sink( Args&&... ) {}
+
+template< class T, int... Indices >
+void unpack_test( T && t, indices<Indices...> ) {
+ sink( f<Indices>(t)... );
+}
+
+int main() {
+ unpack_test( A(), indices<>() );
+}