https://issues.dlang.org/show_bug.cgi?id=18985
RazvanN <razvan.nitu1...@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |razvan.nitu1...@gmail.com --- Comment #4 from RazvanN <razvan.nitu1...@gmail.com> --- AnyObject foo; shared AnyObject bar; void main() { foo += 1; /* Error: foo += 1 is not a scalar, it is a object.Object */ bar += 1; /* Error: read-modify-write operations are not allowed for shared variables. Use core.atomic.atomicOp!"+="(bar, 1) instead. */ } We can distinguish 4 situations here: 1. AnyObject does not define any opOpAssign methods => error message should be in both situations "$object is not scalar" 2. Anyobject does define opOpAssign but it's not shared => foo passes compilation, but bar does not and the most helpful error message would be "read-modify-write operations are not allowed for shared variables. Use core.atomic.atomicOp!"+="(bar, 1) instead or implement a shared opOpAssign for type AnyObject" 3. AnyObject defines opOpAssign shared but not normal opOpAssign => foo += 1 fails with "object is not scalar message" and bar works. 4. AnyObject defines both shared/non-shared opOpAssign => both examples compile --