diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist34.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist35.C | 24 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist36.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist37.C | 24 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist38.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/nullptr04.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic101.C | 23 |
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); +} |