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/initlist34.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist35.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist36.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist37.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist38.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr04.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic101.C23
8 files changed, 137 insertions, 3 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist34.C b/gcc/testsuite/g++.dg/cpp0x/initlist34.C
new file mode 100644
index 00000000000..92f5a3a4605
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist34.C
@@ -0,0 +1,14 @@
+// PR c++/44157
+// { dg-options "-std=c++0x" }
+
+#include <initializer_list>
+
+template<typename T>
+void f(T) { }
+
+int main() {
+ std::initializer_list<int> a = { 0 };
+ f(a);
+
+ f<std::initializer_list<int> >({ 0 });
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist35.C b/gcc/testsuite/g++.dg/cpp0x/initlist35.C
new file mode 100644
index 00000000000..e5b7cb4bd52
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist35.C
@@ -0,0 +1,24 @@
+// PR c++/41510
+// { dg-options "-std=c++0x" }
+
+struct B
+{
+ B(int, int);
+};
+struct A
+{
+ A(int, int);
+ A(const B&);
+};
+
+void f()
+{
+ A a = { 1, 2 };
+};
+
+template <class T> void g()
+{
+ A a = { 1, 2 };
+};
+
+template void g<int>();
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist36.C b/gcc/testsuite/g++.dg/cpp0x/initlist36.C
new file mode 100644
index 00000000000..94624c977c9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist36.C
@@ -0,0 +1,23 @@
+// PR c++/44358
+// { dg-options "-std=c++0x" }
+
+#include <initializer_list>
+
+struct A
+{
+ A(int);
+};
+
+struct B
+{
+ B(std::initializer_list<A>);
+};
+
+void f (B b);
+int main()
+{
+ B b0 = {{1}};
+ B b1 = {{1.0}}; // { dg-error "narrowing" }
+ B b2 {1.0}; // { dg-error "narrowing" }
+ A a {1.0}; // { dg-error "narrowing" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist37.C b/gcc/testsuite/g++.dg/cpp0x/initlist37.C
new file mode 100644
index 00000000000..20c6ab6311f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist37.C
@@ -0,0 +1,24 @@
+// DR 990
+// { dg-options "-std=c++0x" }
+
+#include <initializer_list>
+
+struct S {
+ S(std::initializer_list<double>); // #1
+ S(std::initializer_list<int>); // #2
+ S(); // #3
+ // ...
+};
+S s1 = { 1.0, 2.0, 3.0 }; // invoke #1
+S s2 = { 1, 2, 3 }; // invoke #2
+S s3 = { }; // invoke #3 (for value-initialization)
+
+
+// Test some other situations, too.
+void f (S);
+int main()
+{
+ S s4 { };
+ f({ });
+ S {};
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist38.C b/gcc/testsuite/g++.dg/cpp0x/initlist38.C
new file mode 100644
index 00000000000..818d69ad654
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist38.C
@@ -0,0 +1,21 @@
+// DR 990
+// { dg-options "-std=c++0x" }
+
+#include <initializer_list>
+
+struct A {
+ A(std::initializer_list<int>); // #1
+};
+struct B {
+ A a;
+};
+
+void f (B);
+int main()
+{
+ B{};
+ f({});
+ B b0 = { };
+ B b1 { }; // OK, uses #1
+ B b2 { 1 }; // { dg-error "conversion" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr04.C b/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
index f092b70a46b..28e37156f8c 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
@@ -3,7 +3,11 @@
// Test cast to int
+#define unsigned
+__extension__ typedef __SIZE_TYPE__ ssize_t;
+#undef unsigned
+
const int n4 = static_cast<const int>(nullptr); // { dg-error "invalid static_cast " }
const short int n5 = reinterpret_cast<short int>(nullptr); // { dg-error "loses precision" }
-const long int n6 = reinterpret_cast<long int>(nullptr);
-const long int n7 = (long int)nullptr;
+const ssize_t n6 = reinterpret_cast<ssize_t>(nullptr);
+const ssize_t n7 = (ssize_t)nullptr;
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
index de52d0f48f6..beb8acb5a50 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
@@ -19,7 +19,8 @@ int test2()
base2 b2(b);
assert(move_construct == 0);
base2 b3(static_cast<base2&&>(b));
- assert(move_construct == 1);
+ base2 b4 = static_cast<base2&&>(b);
+ assert(move_construct == 2);
b = b2;
assert(move_assign == 0);
b = static_cast<base2&&>(b2);
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic101.C b/gcc/testsuite/g++.dg/cpp0x/variadic101.C
new file mode 100644
index 00000000000..445a770afa1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic101.C
@@ -0,0 +1,23 @@
+// PR c++/43382
+// { dg-options "-std=c++0x" }
+
+template<class T>
+struct Container
+{ T f() const; };
+
+template<class T>
+T deref(const T& t)
+{ return t; }
+
+
+template <class T, class... Args>
+auto
+deref(const T& u, int r, Args... args)
+-> decltype(deref(u.f(), args...))
+{ return deref(u.f(), args...); }
+
+int main(void)
+{
+ Container<Container<int>> v;
+ deref(v,1,2);
+}