]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/cp/pt.c
re PR c++/4361 (bogus ambiguity taking the address of a member template)
authorNathan Sidwell <nathan@codesourcery.com>
Sat, 16 Mar 2002 18:30:16 +0000 (18:30 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Sat, 16 Mar 2002 18:30:16 +0000 (18:30 +0000)
commit5dd236e238bbea08ee2134d00306e03befd7e25b
treefe6bb32d28da75dc1021968451c83d5aba03ffe7
parent28eca9e87b9e4b0f6f30fda48d2b550299b1cc4b
re PR c++/4361 (bogus ambiguity taking the address of a member template)

cp:
PR c++/4361
* cp-tree.h (CLASSTYPE_METHOD_VEC): Document where templated
conversion operators go.
(struct lang_decl_flags): Add template_conv_p and unused
bitfields.
(DECL_TEMPLATE_CONV_FN_P): New macro.
* call.c (build_user_type_conversion_1): Don't check second type
conversion of overload set first.
* class.c (add_method): Make sure templated conversion operators
all end up on slot 2.
* lex.c (do_identifier): A conversion operator token might be
satisfied by a templated conversion operator.
* mangle.c (struct globals) Add internal_mangling_p member.
(write_template_param): Do internal mangling, if needed.
(mangle_conv_op_name_for_type): Request internal mangling.
* pt.c (check_explicit_specialization): Use
CLASSTYPE_FIRST_CONVERSION_SLOT.
(template_parm_this_level_p): New function.
(push_template_decl_real): Determine DECL_TEMPLATE_CONV_FN_P.
* search.c (lookup_fn_fields_1): Template conversions will be on
the first slot.
* typeck.c (build_component_ref): Preserve the type of an
conversion operator name on the overload type.
(build_x_function_call): Retrieve the conversion operator name.
testsuite:
* g++.dg/template/conv1.C: New test.
* g++.dg/template/conv2.C: New test.
* g++.dg/template/conv3.C: New test.
* g++.dg/template/conv4.C: New test.

From-SVN: r50889
13 files changed:
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/lex.c
gcc/cp/pt.c
gcc/cp/search.c
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/conv1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/conv2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/conv3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/conv4.C [new file with mode: 0644]