Index: libcfa/src/concurrency/actor.hfa
===================================================================
--- libcfa/src/concurrency/actor.hfa	(revision 0f275f70bfb2606531ac8435cab38e5b4357a0cf)
+++ libcfa/src/concurrency/actor.hfa	(revision 681d8f2b4c5a072b13aa1e839314057c84f4e832)
@@ -460,6 +460,6 @@
 static inline void deliver_request( request & this ) {
     this.receiver->allocation_ = this.fn( *this.receiver, *this.msg );
+    check_message( *this.msg );
     check_actor( *this.receiver );
-    check_message( *this.msg );
 }
 
@@ -681,16 +681,7 @@
 // assigned at creation to __base_msg_finished to avoid unused message warning
 message __base_msg_finished @= { .allocation_ : Finished };
-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;
+struct __DeleteMsg { inline message; } DeleteMsg = __base_msg_finished;
+struct __DestroyMsg { inline message; } DestroyMsg = __base_msg_finished;
+struct __FinishedMsg { inline message; } FinishedMsg = __base_msg_finished;
 
 Allocation receive( actor & this, __DeleteMsg & msg ) { return Delete; }
