diff --git a/include/pybind11/common.h b/include/pybind11/common.h
index 9db37ad..eff105c 100644
--- a/include/pybind11/common.h
+++ b/include/pybind11/common.h
@@ -333,14 +333,14 @@
 /// Format strings for basic number types
 #define PYBIND11_DECL_FMT(t, v) template<> struct format_descriptor<t> \
     { static constexpr const char* value = v; /* for backwards compatibility */ \
-      static constexpr const char* format() { return value; } }
+      static std::string format() { return value; } }
 
 template <typename T, typename SFINAE = void> struct format_descriptor { };
 
 template <typename T> struct format_descriptor<T, typename std::enable_if<std::is_integral<T>::value>::type> {
     static constexpr const char value[2] =
         { "bBhHiIqQ"[detail::log2(sizeof(T))*2 + (std::is_unsigned<T>::value ? 1 : 0)], '\0' };
-    static constexpr const char* format() { return value; }
+    static std::string format() { return value; }
 };
 
 template <typename T> constexpr const char format_descriptor<
diff --git a/include/pybind11/numpy.h b/include/pybind11/numpy.h
index c71d9bb..8653fc1 100644
--- a/include/pybind11/numpy.h
+++ b/include/pybind11/numpy.h
@@ -17,6 +17,7 @@
 #include <cstdlib>
 #include <cstring>
 #include <sstream>
+#include <string>
 #include <initializer_list>
 
 #if defined(_MSC_VER)
@@ -303,14 +304,14 @@
 
 template <typename T>
 struct format_descriptor<T, typename std::enable_if<detail::is_pod_struct<T>::value>::type> {
-    static const char *format() { return detail::npy_format_descriptor<T>::format(); }
+    static std::string format() { return detail::npy_format_descriptor<T>::format(); }
 };
 
 template <size_t N> struct format_descriptor<char[N]> {
-    static const char *format() { PYBIND11_DESCR s = detail::_<N>() + detail::_("s"); return s.text(); }
+    static std::string format() { return std::to_string(N) + "s"; }
 };
 template <size_t N> struct format_descriptor<std::array<char, N>> {
-    static const char *format() { PYBIND11_DESCR s = detail::_<N>() + detail::_("s"); return s.text(); }
+    static std::string format() { return std::to_string(N) + "s"; }
 };
 
 NAMESPACE_BEGIN(detail)
@@ -367,11 +368,7 @@
 
 #define DECL_CHAR_FMT \
     static PYBIND11_DESCR name() { return _("S") + _<N>(); } \
-    static pybind11::dtype dtype() { \
-        PYBIND11_DESCR fmt = _("S") + _<N>(); \
-        return pybind11::dtype(fmt.text());  \
-    } \
-    static const char *format() { PYBIND11_DESCR s = _<N>() + _("s"); return s.text(); }
+    static pybind11::dtype dtype() { return std::string("S") + std::to_string(N); }
 template <size_t N> struct npy_format_descriptor<char[N]> { DECL_CHAR_FMT };
 template <size_t N> struct npy_format_descriptor<std::array<char, N>> { DECL_CHAR_FMT };
 #undef DECL_CHAR_FMT
@@ -380,7 +377,7 @@
     const char *name;
     size_t offset;
     size_t size;
-    const char *format;
+    std::string format;
     dtype descr;
 };
 
@@ -389,15 +386,15 @@
     static PYBIND11_DESCR name() { return _("struct"); }
 
     static pybind11::dtype dtype() {
-        if (!dtype_())
+        if (!dtype_ptr)
             pybind11_fail("NumPy: unsupported buffer format!");
-        return object(dtype_(), true);
+        return object(dtype_ptr, true);
     }
 
-    static const char* format() {
-        if (!dtype_())
+    static std::string format() {
+        if (!dtype_ptr)
             pybind11_fail("NumPy: unsupported buffer format!");
-        return format_().c_str();
+        return format_str;
     }
 
     static void register_dtype(std::initializer_list<field_descriptor> fields) {
@@ -409,7 +406,7 @@
             formats.append(field.descr);
             offsets.append(int_(field.offset));
         }
-        dtype_() = pybind11::dtype(names, formats, offsets, sizeof(T)).release().ptr();
+        dtype_ptr = pybind11::dtype(names, formats, offsets, sizeof(T)).release().ptr();
 
         // There is an existing bug in NumPy (as of v1.11): trailing bytes are
         // not encoded explicitly into the format string. This will supposedly
@@ -436,20 +433,25 @@
         if (sizeof(T) > offset)
             oss << (sizeof(T) - offset) << 'x';
         oss << '}';
-        format_() = oss.str();
+        format_str = oss.str();
 
         // Sanity check: verify that NumPy properly parses our buffer format string
         auto& api = npy_api::get();
-        auto arr =  array(buffer_info(nullptr, sizeof(T), format(), 1, { 0 }, { sizeof(T) }));
-        if (!api.PyArray_EquivTypes_(dtype_(), arr.dtype().ptr()))
+        auto arr =  array(buffer_info(nullptr, sizeof(T), format(), 1));
+        if (!api.PyArray_EquivTypes_(dtype_ptr, arr.dtype().ptr()))
             pybind11_fail("NumPy: invalid buffer descriptor!");
     }
 
 private:
-    static inline PyObject*& dtype_() { static PyObject *ptr = nullptr; return ptr; }
-    static inline std::string& format_() { static std::string s; return s; }
+    static std::string format_str;
+    static PyObject* dtype_ptr;
 };
 
+template <typename T>
+std::string npy_format_descriptor<T, typename std::enable_if<is_pod_struct<T>::value>::type>::format_str;
+template <typename T>
+PyObject* npy_format_descriptor<T, typename std::enable_if<is_pod_struct<T>::value>::type>::dtype_ptr = nullptr;
+
 // Extract name, offset and format descriptor for a struct field
 #define PYBIND11_FIELD_DESCRIPTOR(Type, Field) \
     ::pybind11::detail::field_descriptor { \
