diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2017-06-07 12:34:36 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-06-07 12:34:36 +0100 |
commit | 83059741a0a58b6cccb105522bf7f07813a55c23 (patch) | |
tree | beb693a70da20c26df8031058c455c7027780241 | |
parent | 09a939a0d5c407e94b03421b87450af8fecdfe52 (diff) | |
download | gcc-83059741a0a58b6cccb105522bf7f07813a55c23.zip gcc-83059741a0a58b6cccb105522bf7f07813a55c23.tar.gz gcc-83059741a0a58b6cccb105522bf7f07813a55c23.tar.bz2 |
PR c++/80990 use cv-qualifiers in class template argument deduction
gcc/cp:
PR c++/80990
* pt.c (do_class_deduction): Build qualified type.
gcc/testsuite:
PR c++/80990
* g++.dg/cpp1z/class-deduction39.C: New.
From-SVN: r248966
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1z/class-deduction39.C | 15 |
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8375cee..e47c429 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2017-06-07 Jonathan Wakely <jwakely@redhat.com> + + PR c++/80990 + * pt.c (do_class_deduction): Build qualified type. + 2017-06-06 Nathan Sidwell <nathan@acm.org> * name-lookup.c (suggest_alternatives_for): Use qualified lookup diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index a04f2e0..ada94bd 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -25367,7 +25367,7 @@ do_class_deduction (tree ptype, tree tmpl, tree init, int flags, --cp_unevaluated_operand; release_tree_vector (args); - return TREE_TYPE (t); + return cp_build_qualified_type (TREE_TYPE (t), cp_type_quals (ptype)); } /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 990e10a..e5a4dbd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-06-07 Jonathan Wakely <jwakely@redhat.com> + + PR c++/80990 + * g++.dg/cpp1z/class-deduction39.C: New. + 2017-06-07 Marek Polacek <polacek@redhat.com> PR sanitizer/80932 diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction39.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction39.C new file mode 100644 index 0000000..98a3664 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction39.C @@ -0,0 +1,15 @@ +// { dg-options -std=c++1z } + +template <class T> struct A { }; + +A<int> a; +const A c = a; +volatile A v = a; +const volatile A cv = a; + +template <class,class> struct same; +template <class T> struct same<T,T> {}; + +same<decltype(c), const A<int>> s1; +same<decltype(v), volatile A<int>> s2; +same<decltype(cv), const volatile A<int>> s3; |