// { dg-do run } // g++ 1.36.1 bug 900220_03 // g++ does not properly disambiguate calls to overloaded functions // which are nearly identical except that one take a reference to a // type `T' object and another takes a reference to a type `const T' // object. // (Note that the volatile stuff is commented out here because cfront // does not yet grok volatile.) // Cfront 2.0 passes this test. // keywords: references, overloading, type qualifiers, pointers int c_call_count = 0; int cc_call_count = 0; //int vc_call_count = 0; void overloaded (char&) { c_call_count++; } void overloaded (const char&) { cc_call_count++; } //void overloaded (volatile char&) //{ // vc_call_count++; //} int test () { char c = 0; const char cc = 0; //volatile char vc = 0; char& cr = c; const char& ccr = cc; //volatile char& vcr = vc; overloaded (c); // OK overloaded (cc); // { dg-bogus "" } //overloaded (vc); // OK return (c_call_count != 1 || cc_call_count != 1 /* || vc_call_count != 1 */); } int main () { return test (); }