diff --git a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
index 87610c7baede66729ba5181195410924cc488936..5aa8f3cfa972039cebb19f5df6efc609361463e0 100644
--- a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
+++ b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
@@ -257,16 +257,6 @@
 			uint8_t USB_GetNextDescriptorComp(uint16_t* BytesRem, void** const CurrConfigLoc, ConfigComparatorPtr_t const ComparatorRoutine);
 
 		/* Inline Functions: */
-			#if !defined(__DOXYGEN__)
-			static inline void USB_GetNextDescriptorST(uint16_t* const BytesRem, uint8_t** CurrConfigLoc)
-			{
-				uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size;
-				
-				*CurrConfigLoc += CurrDescriptorSize;
-				*BytesRem      -= CurrDescriptorSize;
-			}			
-			#endif
-		
 			/** Skips over the current sub-descriptor inside the configuration descriptor, so that the pointer then
 			    points to the next sub-descriptor. The bytes remaining value is automatically decremented.
 			 *
@@ -277,12 +267,10 @@
 			                                         ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);									  
 			static inline void USB_GetNextDescriptor(uint16_t* const BytesRem, void** CurrConfigLoc)
 			{
-				/* Horrible workaround for a bug in GCC - in some circumstances, the code generated for the strongly-typed
-				 * (uint8_t**) cast to avoid void pointer arithmetic (which is not allowed in C++) causes incorrect code to
-				 * be generated. Performing the cast and using a secondary inline routine show here seems to avoid the
-				 * problem.
-				 */
-				USB_GetNextDescriptorST(BytesRem, (uint8_t**)CurrConfigLoc);
+				uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size;
+				
+				*CurrConfigLoc += ((uint8_t*)*CurrConfigLoc) + CurrDescriptorSize;
+				*BytesRem      -= CurrDescriptorSize;
 			}
 		
 	/* Disable C linkage for C++ Compilers: */
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index c123116c74439cf71f282c742793d140f31f56c0..03e55b96277f90063300ac099408f244935137ce 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -31,6 +31,7 @@
   *  - Fixed XPLAINBridge project not correctly reading the XMEGA's supply voltage when reporting back to the host
   *  - Fixed incorrect signature for the ATMEGA32U2 in the DFU bootloader (thanks to Axel Rohde)
   *  - Fixed internal device serial not being accessible on the ATMEGAXXU2 AVRs (thanks to Axel Rohde)
+  *  - Fixed void pointer arithmetic in ConfigDescriptor.h breaking C++ compatibility (thanks to Michael Hennebry)
   *
   *  \section Sec_ChangeLog100513 Version 100513
   *  <b>New:</b>