Index: libcfa/src/concurrency/actor.hfa
===================================================================
--- libcfa/src/concurrency/actor.hfa	(revision 9155026b8a8ebdc8a5b35d348434d4e9135bb8e7)
+++ libcfa/src/concurrency/actor.hfa	(revision d40555e2b1330a8ee21c9815cedd20cd6ddacd8f)
@@ -681,10 +681,16 @@
 // assigned at creation to __base_msg_finished to avoid unused message warning
 message __base_msg_finished @= { .allocation_ : Finished };
-struct __DeleteMsg { inline message; } DeleteMsg = __base_msg_finished;
-struct __DestroyMsg { inline message; } DestroyMsg = __base_msg_finished;
-struct __FinishedMsg { inline message; } FinishedMsg = __base_msg_finished;
-void ?{}( __DeleteMsg & this, Allocation status ) { ((message &) this){ status }; }
-void ?{}( __DestroyMsg & this, Allocation status ) { ((message &) this){ status }; }
-void ?{}( __FinishedMsg & this, Allocation status ) { ((message &) this){ status }; }
+struct __DeleteMsg { inline message; };
+struct __DestroyMsg { inline message; };
+struct __FinishedMsg { inline message; };
+
+// These are needed so that the compiler doesn't make a temporary when initializing below
+static inline void ?{}( __DeleteMsg & this, message & other ) { this.allocation_ = other.allocation_; }
+static inline void ?{}( __DestroyMsg & this, message & other ) { this.allocation_ = other.allocation_; }
+static inline void ?{}( __FinishedMsg & this, message & other ) { this.allocation_ = other.allocation_; }
+
+__DeleteMsg DeleteMsg = __base_msg_finished;
+__DestroyMsg DestroyMsg = __base_msg_finished;
+__FinishedMsg FinishedMsg = __base_msg_finished;
 
 Allocation receive( actor & this, __DeleteMsg & msg ) { return Delete; }
