diff -ur a/liboctave/operators/libcxx-fix.h b/liboctave/operators/libcxx-fix.h
--- /dev/null	2015-05-23 16:21:53.000000000 +0200
+++ liboctave/operators/libcxx-fix.h	2015-07-25 11:23:50.000000000 +0200
@@ -0,0 +1,69 @@
+#ifndef _LIBCPP_VERSION
+#error "for libc++ only"
+#endif
+
+namespace libcxx_fix {
+
+using std::is_integral;
+using std::is_same;
+using std::enable_if;
+
+template <class _Tp, class _Tn = void>
+struct numeric_type
+{
+    typedef void type;
+    static const bool value = false;
+};
+
+template <class _Tp>
+struct numeric_type<_Tp, typename enable_if<is_integral<_Tp>::value ||
+                                            is_same<_Tp, double>::value>::type>
+{
+    typedef double type;
+    static const bool value = true;
+};
+
+template <class _Tp>
+struct numeric_type<_Tp, typename enable_if<is_same<_Tp, long double>::value ||
+                                            is_same<_Tp, float>::value>::type>
+{
+    typedef _Tp type;
+    static const bool value = true;
+};
+
+template <>
+struct numeric_type<void, void>
+{
+    static const bool value = true;
+};
+
+template <class _A1, class _A2,
+          bool = numeric_type<_A1>::value &&
+                 numeric_type<_A2>::value>
+class promote
+{};
+
+template <class _A1, class _A2>
+class promote<_A1, _A2, true>
+{
+private:
+    typedef typename numeric_type<_A1>::type __type1;
+    typedef typename numeric_type<_A2>::type __type2;
+public:
+    typedef decltype(__type1() + __type2()) type;
+};
+
+template <class _A1, class _A2>
+inline _LIBCPP_INLINE_VISIBILITY
+typename promote<_A1, _A2>::type
+pow(_A1 __x, _A2 __y) _NOEXCEPT
+{
+    typedef typename promote<_A1, _A2>::type __result_type;
+#if _LIBCPP_STD_VER > 11
+    static_assert((!(is_same<_A1, __result_type>::value &&
+                     is_same<_A2, __result_type>::value)), "");
+#endif
+    return ::pow(static_cast<__result_type>(__x), static_cast<__result_type>(__y));
+}
+
+}
diff -ur a/libinterp/corefcn/comment-list.h b/libinterp/corefcn/comment-list.h
--- libinterp/corefcn/comment-list.h	2015-05-23 16:21:53.000000000 +0200
+++ libinterp/corefcn/comment-list.h	2015-07-25 11:23:50.000000000 +0200
@@ -25,7 +25,7 @@
 
 #include <string>
 
-#include <base-list.h>
+#include "base-list.h"
 
 extern std::string get_comment_text (void);
 
diff -ur a/libinterp/corefcn/oct.h b/libinterp/corefcn/oct.h
--- libinterp/corefcn/oct.h	2015-05-23 16:21:53.000000000 +0200
+++ libinterp/corefcn/oct.h	2015-07-25 11:24:22.000000000 +0200
@@ -28,7 +28,7 @@
 // config.h needs to be first because it includes #defines that can */
 // affect other header files.
 
-#include <config.h>
+#include "config.h"
 
 #include "Matrix.h"
 
diff -ur a/libinterp/octave-value/ov-classdef.cc b/libinterp/octave-value/ov-classdef.cc
--- libinterp/octave-value/ov-classdef.cc	2015-05-23 16:21:53.000000000 +0200
+++ libinterp/octave-value/ov-classdef.cc	2015-07-25 11:25:24.000000000 +0200
@@ -1937,6 +1937,11 @@
   return true;
 }
 
+void cdef_object_scalar::mark_as_constructed (const cdef_class& cls)
+{
+  ctor_list.erase (cls);
+}
+
 handle_cdef_object::~handle_cdef_object (void)
 {
 #if DEBUG_TRACE
diff -ur a/libinterp/octave-value/ov-classdef.h b/libinterp/octave-value/ov-classdef.h
--- libinterp/octave-value/ov-classdef.h	2015-05-23 16:21:53.000000000 +0200
+++ libinterp/octave-value/ov-classdef.h	2015-07-25 11:25:49.000000000 +0200
@@ -438,7 +438,7 @@
 
   void mark_as_constructed (void) { ctor_list.clear (); }
 
-  void mark_as_constructed (const cdef_class& cls) { ctor_list.erase (cls); }
+  void mark_as_constructed (const cdef_class& cls);
 
   bool is_constructed (void) const { return ctor_list.empty (); }
 
diff -ur a/liboctave/Makefile.in b/liboctave/Makefile.in
--- liboctave/Makefile.in	2015-05-26 18:21:48.000000000 +0200
+++ liboctave/Makefile.in	2015-07-25 11:21:34.000000000 +0200
@@ -3864,7 +3864,8 @@
   operators/Sparse-diag-op-defs.h \
   operators/Sparse-op-decls.h \
   operators/Sparse-op-defs.h \
-  operators/Sparse-perm-op-defs.h
+  operators/Sparse-perm-op-defs.h \
+  operators/libcxx-fix.h
 
 OPERATORS_SRC = 
 OP_SRCDIR = $(abs_top_srcdir)/liboctave/operators
diff -ur a/liboctave/operators/module.mk b/liboctave/operators/module.mk
--- liboctave/operators/module.mk	2015-05-23 16:21:53.000000000 +0200
+++ liboctave/operators/module.mk	2015-07-25 11:20:50.000000000 +0200
@@ -35,7 +35,8 @@
   operators/Sparse-diag-op-defs.h \
   operators/Sparse-op-decls.h \
   operators/Sparse-op-defs.h \
-  operators/Sparse-perm-op-defs.h
+  operators/Sparse-perm-op-defs.h \
+  operators/libcxx-fix.h
 
 ## There are no distributed source files in this directory
 OPERATORS_SRC =
diff -ur a/liboctave/operators/mx-inlines.cc b/liboctave/operators/mx-inlines.cc
--- liboctave/operators/mx-inlines.cc	2015-05-23 16:21:53.000000000 +0200
+++ liboctave/operators/mx-inlines.cc	2015-07-25 11:23:11.000000000 +0200
@@ -307,7 +307,13 @@
 
 // Let the compiler decide which pow to use, whichever best matches the
 // arguments provided.
+#if defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION >= 1101)
+// Workaround http://llvm.org/bugs/show_bug.cgi?id=21083
+#include "libcxx-fix.h"
+using libcxx_fix::pow;
+#else
 using std::pow;
+#endif
 DEFMXMAPPER2X (mx_inline_pow, pow)
 
 // Arbitrary function appliers. The function is a template parameter to enable
 