// { dg-do run } // Copyright (C) 2000 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 18 Jan 2001 // Bug 1617. We didn't resolve partial ordering properly. The std is rather // vague about it anyway, DR 214 talks about this. extern "C" int puts (char const *); template int Foo (T *) {puts (__PRETTY_FUNCTION__); return 1;} template int Foo (T &) {puts (__PRETTY_FUNCTION__); return 2;} template int Foo (T const &) {puts (__PRETTY_FUNCTION__); return 3;} template int Bar (T const *const &) {puts (__PRETTY_FUNCTION__); return 4;} template int Bar (T *const &) {puts (__PRETTY_FUNCTION__); return 5;} template int Bar (T *) {puts (__PRETTY_FUNCTION__); return 6;} template int Quux (T *const &) {puts (__PRETTY_FUNCTION__); return 7;} template int Quux (T const &) {puts (__PRETTY_FUNCTION__); return 8;} int Baz (int const *ptr, int *ptr2) { if (Foo (ptr) != 1) return 1; if (Foo (ptr2) != 1) return 2; if (Foo (*ptr) != 3) return 3; if (Foo (*ptr2) != 2) return 4; if (Bar (ptr) != 4) return 5; if (Quux (ptr) != 7) return 5; if (Quux (ptr2) != 7) return 6; return 0; } int main () { return Baz (0, 0); }