diff --git a/ChangeLog b/ChangeLog
index fc19a55b9329cbd4965be560a3e63c5d6ab993f8..de0f8872fac3e6be7b49c960362c740299da0da1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2222,3 +2222,6 @@
 	  STM32F50xxx family of MCUs.
 	* configs/stm3240g-eval:  Add framework for the STMicro STM3240G-EVAL
 	  board.
+	* include/sys/types.h:  wchar_t is a builtin type in C++ and its
+	  declaration can cause errors with certain C++ compilers.
+
diff --git a/Documentation/NuttxUserGuide.html b/Documentation/NuttxUserGuide.html
index 60c63f181feb2f49c3a6273b1cef5e04b1aceedd..a5997f9728cf6f1f3c168cdee9cded742039f803 100644
--- a/Documentation/NuttxUserGuide.html
+++ b/Documentation/NuttxUserGuide.html
@@ -1260,6 +1260,9 @@ interface of the same name.
   If the message queue is full and <code>NON_BLOCK</code> is set, the message
   is not queued and <code>ERROR</code> is returned.
 </p>
+<p>
+<b>NOTE</b>: <i>mq_send()</i> may be called from an interrupt handler.
+<p>
 <p>
   <b>Input Parameters:</b> 
 </p>
@@ -2236,7 +2239,7 @@ If the value of the semaphore resulting from this operation is zero, then
 on of the tasks blocked waiting for the semaphore will be allowed to
 return successfully from its call to <i>sem_wait()</i>.
 <p>
-<b>NOTE</b>:  <i>sem_post()</i> may be called from an interrupt handler.
+<b>NOTE</b>: <i>sem_post()</i> may be called from an interrupt handler.
 <p>
 <b>Input Parameters:</b> 
 <ul>
@@ -2250,9 +2253,9 @@ return successfully from its call to <i>sem_wait()</i>.
 </ul>
 
 <p>
-<b>Assumptions/Limitations:</b> This function cannot be called
-from an interrupt handler. It assumes the currently executing
-task is the one that is performing the unlock.
+<b>Assumptions/Limitations:</b>.
+When called from an interrupt handler, it will appear as though the
+interrupt task is the one that is performing the unlock.
 <p>
 <b>  POSIX  Compatibility:</b> Comparable to the POSIX
 interface of the same name.
diff --git a/configs/sim/nsh2/Make.defs b/configs/sim/nsh2/Make.defs
index b127e0a209e388234327e07629524005aa77cf20..39b33dc7dc97763fac77ebb5cfe7fd55c58999ce 100644
--- a/configs/sim/nsh2/Make.defs
+++ b/configs/sim/nsh2/Make.defs
@@ -49,6 +49,7 @@ ARCHPICFLAGS		= -fpic
 ARCHWARNINGS		= -Wall -Wstrict-prototypes -Wshadow
 ARCHWARNINGSXX		= -Wall -Wshadow
 ARCHDEFINES		=
+ARCHDEFINESXX		= -DCONFIG_WCHAR_BUILTIN
 ARCHINCLUDES		= -I. -isystem $(TOPDIR)/include
 ARCHINCLUDESXX		= -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
 ARCHSCRIPT		=
@@ -66,7 +67,7 @@ OBJDUMP			= $(CROSSDEV)objdump
 CFLAGS			= $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \
 			  $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe
 CXXFLAGS		= $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) \
-			  $(ARCHCPUFLAGSXX) $(ARCHINCLUDESXX) $(ARCHDEFINES) $(EXTRADEFINES) -pipe
+			  $(ARCHCPUFLAGSXX) $(ARCHINCLUDESXX) $(ARCHDEFINESXX) $(EXTRADEFINES) -pipe
 CPPFLAGS		= $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
 AFLAGS			= $(CFLAGS) -D__ASSEMBLY__
 
diff --git a/include/sys/types.h b/include/sys/types.h
index f505c6afa351a4e2ba61c0f02c90f55503d59f0c..0c6f723947d8771813d091a83f1b47c47db29332 100644
--- a/include/sys/types.h
+++ b/include/sys/types.h
@@ -165,9 +165,14 @@ typedef unsigned int id_t;
 
 typedef intptr_t     ptrdiff_t;
 
-/* Wide, 16-bit character types */
+/* Wide, 16-bit character types.  wchar_t is a built-in type in C++ and
+ * its declaration here may cause compilation errors on some compilers
+ * if -DCONFIG_WCHAR_BUILTIN is not included in the CXXFLAGS.
+ */
 
+#ifndef CONFIG_WCHAR_BUILTIN
 typedef uint16_t     wchar_t;
+#endif
 
 /* blkcnt_t and off_t are signed integer types.
  *