summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/overloaded-operator.cpp
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2009-11-18 23:10:33 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2009-11-18 23:10:33 +0000
commit6a96bf7d6e33d18d0599210941f893e3de3612fe (patch)
tree3943c3dabe37dab729c4aa611d8cc0156469960c /clang/test/SemaCXX/overloaded-operator.cpp
parent36029f41189e80f6938ed257c8c06bf0fd35fe0b (diff)
downloadbcm5719-llvm-6a96bf7d6e33d18d0599210941f893e3de3612fe.tar.gz
bcm5719-llvm-6a96bf7d6e33d18d0599210941f893e3de3612fe.zip
Do overload resolution for compound assignment even if only the RHS is overloadable. Compound assignment may be overloaded as a non-member, and anyway the overload resolution is necessary because it triggers implicit (used-defined) conversions. Fixes PR5512, but not really the deeper issues lurking. Those are standard defects.
llvm-svn: 89268
Diffstat (limited to 'clang/test/SemaCXX/overloaded-operator.cpp')
-rw-r--r--clang/test/SemaCXX/overloaded-operator.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/overloaded-operator.cpp b/clang/test/SemaCXX/overloaded-operator.cpp
index 5fdbeebdfd1..16d37040f14 100644
--- a/clang/test/SemaCXX/overloaded-operator.cpp
+++ b/clang/test/SemaCXX/overloaded-operator.cpp
@@ -296,3 +296,31 @@ namespace pr5546
const char* a() { return sMoveCommands[X][0][0]; }
const char* b() { return (*(sMoveCommands+X))[0][0]; }
}
+
+// PR5512 and its discussion
+namespace pr5512 {
+ struct Y {
+ operator short();
+ operator float();
+ };
+ void g_test(Y y) {
+ short s = 0;
+ // DR507, this should be ambiguous, but we special-case assignment
+ s = y;
+ // Note: DR507, this is ambiguous as specified
+ //s += y;
+ }
+
+ struct S {};
+ void operator +=(int&, S);
+ void f(S s) {
+ int i = 0;
+ i += s;
+ }
+
+ struct A {operator int();};
+ int a;
+ void b(A x) {
+ a += x;
+ }
+}
OpenPOWER on IntegriCloud