1// { dg-do run } 2// Copyright (C) 2000 Free Software Foundation, Inc. 3// Contributed by Nathan Sidwell 18 Jan 2001 <nathan@codesourcery.com> 4 5// Bug 1617. We didn't resolve partial ordering properly. The std is rather 6// vague about it anyway, DR 214 talks about this. 7 8extern "C" int puts (char const *); 9 10template <typename T> int Foo (T *) {puts (__PRETTY_FUNCTION__); return 1;} 11template <typename T> int Foo (T &) {puts (__PRETTY_FUNCTION__); return 2;} 12template <typename T> int Foo (T const &) {puts (__PRETTY_FUNCTION__); return 3;} 13 14template <typename T> int Bar (T const *const &) {puts (__PRETTY_FUNCTION__); return 4;} 15template <typename T> int Bar (T *const &) {puts (__PRETTY_FUNCTION__); return 5;} 16template <typename T> int Bar (T *) {puts (__PRETTY_FUNCTION__); return 6;} 17 18template <typename T> int Quux (T *const &) {puts (__PRETTY_FUNCTION__); return 7;} 19template <typename T> int Quux (T const &) {puts (__PRETTY_FUNCTION__); return 8;} 20 21 22int Baz (int const *ptr, int *ptr2) 23{ 24 if (Foo (ptr) != 1) 25 return 1; 26 if (Foo (ptr2) != 1) 27 return 2; 28 if (Foo (*ptr) != 3) 29 return 3; 30 if (Foo (*ptr2) != 2) 31 return 4; 32 33 if (Bar (ptr) != 4) 34 return 5; 35 36 if (Quux (ptr) != 7) 37 return 5; 38 if (Quux (ptr2) != 7) 39 return 6; 40 41 return 0; 42} 43 44int main () 45{ 46 return Baz (0, 0); 47} 48