diff options
author | Patrick Palka <ppalka@redhat.com> | 2023-04-13 16:02:21 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2023-04-13 16:02:21 -0400 |
commit | 50dc52e853ff267ad1f4c98571c262017b0536f8 (patch) | |
tree | 311b6c8f217974e3959d8a7da177f63964405261 /gcc/range-op-float.cc | |
parent | f32f7881fb0db085479525b5a23db5dabd990c3b (diff) | |
download | gcc-50dc52e853ff267ad1f4c98571c262017b0536f8.zip gcc-50dc52e853ff267ad1f4c98571c262017b0536f8.tar.gz gcc-50dc52e853ff267ad1f4c98571c262017b0536f8.tar.bz2 |
c++: 'typename T::X' vs 'struct T::X' lookup [PR109420]
r13-6098-g46711ff8e60d64 made make_typename_type no longer ignore
non-types during the lookup, unless the TYPENAME_TYPE in question was
followed by the :: scope resolution operator. But there is another
exception to this rule: we need to ignore non-types during the lookup
also if the TYPENAME_TYPE was named with a tag other than 'typename',
such as 'struct' or 'enum', since in that case we're dealing with an
elaborated-type-specifier and so [basic.lookup.elab] applies. This
patch implements this additional exception.
PR c++/109420
gcc/cp/ChangeLog:
* decl.cc (make_typename_type): Also ignore non-types during the
lookup if tag_type corresponds to an elaborated-type-specifier.
* pt.cc (tsubst) <case TYPENAME_TYPE>: Pass class_type or
enum_type as tag_type to make_typename_type accordingly instead
of always passing typename_type.
gcc/testsuite/ChangeLog:
* g++.dg/template/typename27.C: New test.
Diffstat (limited to 'gcc/range-op-float.cc')
0 files changed, 0 insertions, 0 deletions