blob: 0c9433ff6ac43514f046f11943b46ee23d3cce49 [file] [log] [blame]
Fariborz Jahaniane7196432009-10-12 20:11:40 +00001// RUN: clang-cc -fsyntax-only -verify %s -std=c++0x
2
3struct A {
4 operator int&();
Fariborz Jahanian3b937fa2009-10-15 17:14:05 +00005 operator long*& ();
Fariborz Jahaniane7196432009-10-12 20:11:40 +00006};
7
8struct B {
9 operator long&();
Fariborz Jahanian3b937fa2009-10-15 17:14:05 +000010 operator int*& ();
Fariborz Jahaniane7196432009-10-12 20:11:40 +000011};
12
13struct C : B, A { };
14
15void test(C c) {
16 ++c; // expected-error {{use of overloaded operator '++' is ambiguous}}\
Fariborz Jahanian3b937fa2009-10-15 17:14:05 +000017 // expected-note {{built-in candidate operator ++ ('int &')}} \
18 // expected-note {{built-in candidate operator ++ ('long &')}} \
19 // expected-note {{built-in candidate operator ++ ('long *&')}} \
20 // expected-note {{built-in candidate operator ++ ('int *&')}}
Fariborz Jahaniane7196432009-10-12 20:11:40 +000021}
22
Fariborz Jahanian3b937fa2009-10-15 17:14:05 +000023struct A1 { operator volatile int&(); };
24
25struct B1 { operator volatile long&(); };
26
27struct C1 : B1, A1 { };
28
29void test(C1 c) {
30 ++c; // expected-error {{use of overloaded operator '++' is ambiguous}} \
31 // expected-note {{built-in candidate operator ++ ('int volatile &')}} \
32 // expected-note {{built-in candidate operator ++ ('long volatile &')}}
33}
Fariborz Jahaniane7196432009-10-12 20:11:40 +000034