diff options
author | Patrick Palka <ppalka@redhat.com> | 2020-03-20 13:06:21 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2020-03-20 13:06:21 -0400 |
commit | a23eff1bd04ebdca503376ae6198d95c737dc3de (patch) | |
tree | dcf338e190266c3a96f485fb3e8ce03757de196f /gcc | |
parent | 1dfcc3b541c52174e0d7d7f30e7e092d02000a7f (diff) | |
download | gcc-a23eff1bd04ebdca503376ae6198d95c737dc3de.zip gcc-a23eff1bd04ebdca503376ae6198d95c737dc3de.tar.gz gcc-a23eff1bd04ebdca503376ae6198d95c737dc3de.tar.bz2 |
c++: Add testcases from PR c++/69694
These testcases are compiling successfully since 7.1.
gcc/testsuite/ChangeLog:
PR c++/69694
* g++.dg/cpp0x/decltype74.C: New test.
* g++.dg/cpp0x/decltype75.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/decltype74.C | 30 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/decltype75.C | 24 |
3 files changed, 60 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c9fff88..76b93b5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2020-03-20 Patrick Palka <ppalka@redhat.com> + + PR c++/69694 + * g++.dg/cpp0x/decltype74.C: New test. + * g++.dg/cpp0x/decltype75.C: New test. + 2020-03-20 Srinath Parvathaneni <srinath.parvathaneni@arm.com> Andre Vieira <andre.simoesdiasvieira@arm.com> Mihail Ionescu <mihail.ionescu@arm.com> diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype74.C b/gcc/testsuite/g++.dg/cpp0x/decltype74.C new file mode 100644 index 0000000..9ddd1c1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype74.C @@ -0,0 +1,30 @@ +// PR c++/69694 +// { dg-do compile { target c++11 } } + +// n3911: TransformationTrait Alias `void_t` +template<typename...> struct make_void { using type = void; }; +template<typename... Ts> using void_t = typename make_void<Ts...>::type; + +// std::declval<void*&> +void*& declval_void(); + +template<typename, typename = void> struct Fun; +template<typename R> + struct Fun<R(), void> +{ + void fun(); +}; +template<typename Desc> + struct Fun<Desc, void_t<decltype (declval_void() = Desc::name)>> + : Fun<void()> +{ +}; + +struct Tag { static constexpr void* name = 0; }; + +template<typename> void a() +{ + Fun<Tag>{}.fun(); +} + +void b() { a<int>(); } diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype75.C b/gcc/testsuite/g++.dg/cpp0x/decltype75.C new file mode 100644 index 0000000..0e97411 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype75.C @@ -0,0 +1,24 @@ +// PR c++/69694 +// This is a reduced version of decltype74.C. +// { dg-do compile { target c++11 } } + +template<typename... Ts> using void_t = void; + +extern void *declval_void; + +template<typename, typename> struct Fun { }; + +template<typename Desc> +struct Fun<Desc, void_t<decltype (declval_void = Desc::name)>> +{ + void fun(); +}; + +struct Tag { static constexpr void* name = 0; }; + +template<typename> void a() +{ + Fun<Tag, void>{}.fun(); +} + +void b() { a<int>(); } |