From dda0439880fee40a90309ed74446c29a3ca08a05 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 31 Mar 2005 17:36:17 +0000 Subject: PR c++/19203, implement DR 214 cp: PR c++/19203, implement DR 214 * call.c (joust): Use more_specialized_fn. * cp-tree.h (DEDUCE_ORDER): Remove. (more_specialized): Replace with ... (more_specialized_fn): ... this. * pt.c (maybe_adjust_types_for_deduction): Remove DEDUCE_ORDER case. (type_unification_real): Remove DEDUCE_ORDER case. (more_specialized): Replace with ... (more_specialized_fn): ... this. Implement DR 214. (most_specialized_instantiation): Use get_bindings_real directly. testsuite: PR c++/19203, DR 214 * g++.dg/parse/ambig3.C: Not ambiguous. * g++.dg/template/spec20.C: New. * g++.dg/template/spec21.C: New. From-SVN: r97336 --- gcc/testsuite/ChangeLog | 7 +++++++ gcc/testsuite/g++.dg/parse/ambig3.C | 15 ++++++++++++--- gcc/testsuite/g++.dg/template/spec20.C | 19 +++++++++++++++++++ gcc/testsuite/g++.dg/template/spec21.C | 28 ++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/spec20.C create mode 100644 gcc/testsuite/g++.dg/template/spec21.C (limited to 'gcc/testsuite') diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 66d1b01..afa03d5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2005-03-31 Nathan Sidwell + + PR c++/19203, DR 214 + * g++.dg/parse/ambig3.C: Not ambiguous. + * g++.dg/template/spec20.C: New. + * g++.dg/template/spec21.C: New. + 2005-03-31 Steve Ellcey PR target/20045 diff --git a/gcc/testsuite/g++.dg/parse/ambig3.C b/gcc/testsuite/g++.dg/parse/ambig3.C index 72ee960..4139071 100644 --- a/gcc/testsuite/g++.dg/parse/ambig3.C +++ b/gcc/testsuite/g++.dg/parse/ambig3.C @@ -5,8 +5,17 @@ template struct A { static const int i = 1; }; template struct B {}; -template void foo(B<0>) {} // { dg-error "" } +template int foo(B<0>) +{ + return 0; +} -template B::i-1> foo(B) { return B<0>(); } // { dg-error "" } +template B::i-1> foo(B) +{ + return B<0>(); +} -void bar() { foo(B<0>()); } // { dg-error "ambiguous" } +int main() +{ + return foo(B<0>()); +} diff --git a/gcc/testsuite/g++.dg/template/spec20.C b/gcc/testsuite/g++.dg/template/spec20.C new file mode 100644 index 0000000..71548e4 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/spec20.C @@ -0,0 +1,19 @@ +// Copyright (C) 2005 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 31 Mar 2005 + +// Origin: Giovanni Bajo +// Bug 19203: Failure to implement DR 214 + +template +void foo(const A& a); + +template +int foo(RET (&)(ARG1)); // this one + + +float decl(int); + +int bar(void) +{ + return foo(decl); +} diff --git a/gcc/testsuite/g++.dg/template/spec21.C b/gcc/testsuite/g++.dg/template/spec21.C new file mode 100644 index 0000000..e04ac5a --- /dev/null +++ b/gcc/testsuite/g++.dg/template/spec21.C @@ -0,0 +1,28 @@ +// Copyright (C) 2005 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 31 Mar 2005 + +// { dg-do run } +// DR214 + +template T f(int) {return 0;} +template T f(U){return 1;} + +template T checked_cast (R const &) {return 0;} +template T checked_cast (R *) {return 1;} + + +int main () +{ + int i = 0; + + if (f(1)) + return 1; + + if (checked_cast(i) != 0) + return 2; + + if (checked_cast(&i) != 1) + return 3; + + return 0; +} -- cgit v1.1