diff --git a/src/command_line_options.cpp b/src/command_line_options.cpp
index bf7f3d3..8853d03 100644
--- a/src/command_line_options.cpp
+++ b/src/command_line_options.cpp
@@ -28,8 +28,11 @@
 #include "uinput_deviceid.hpp"
 #include "command_line_options.hpp"
 
-// See http://stackoverflow.com/questions/303562/c-format-macro-inline-ostringstream
-#define RAISE_EXCEPTION(x) throw std::runtime_error(static_cast<std::ostringstream&>(std::ostringstream().seekp(0, std::ios_base::cur) << x).str())
+#define RAISE_EXCEPTION(x) do { \
+  std::ostringstream kiJk8f08d4oMX; \
+  kiJk8f08d4oMX << x; \
+  throw std::runtime_error(kiJk8f08d4oMX.str()); \
+} while(0)
 
 CommandLineOptions* command_line_options = 0;
 
diff --git a/src/uinput.hpp b/src/uinput.hpp
index 16f8bb1..c73fe69 100644
--- a/src/uinput.hpp
+++ b/src/uinput.hpp
@@ -33,9 +33,9 @@
 #include "xboxdrv.hpp"
 #include "xpad_device.hpp"
 
-class Xbox360Msg;
-class Xbox360GuitarMsg;
-class XboxMsg;
+struct Xbox360Msg;
+struct XboxMsg;
+struct Xbox360GuitarMsg;
   
 class uInput
 {
diff --git a/src/xbox360_wireless_controller.hpp b/src/xbox360_wireless_controller.hpp
index 9e467bf..6052042 100644
--- a/src/xbox360_wireless_controller.hpp
+++ b/src/xbox360_wireless_controller.hpp
@@ -22,7 +22,7 @@
 #include "xbox_generic_controller.hpp"
 
 class USBReadThread;
-class XboxGenericMsg;
+struct XboxGenericMsg;
 struct XPadDevice;
 
 /** */
diff --git a/src/xbox_generic_controller.hpp b/src/xbox_generic_controller.hpp
index 777f254..422d270 100644
--- a/src/xbox_generic_controller.hpp
+++ b/src/xbox_generic_controller.hpp
@@ -21,7 +21,7 @@
 
 #include <stdint.h>
 
-class XboxGenericMsg;
+struct XboxGenericMsg;
 
 class XboxGenericController
 {