diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/auto26.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C | 20 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/decltype30.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/enum20.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/explicit6.C | 11 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist52.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/noexcept13.C | 78 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C | 13 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/rv-func2.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/sfinae26.C | 38 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic-default.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic112.C | 19 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic113.C | 20 |
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<>() ); +} |