Make changes to format_descriptor backwards-compat

The format strings that are known at compile time are now accessible
via both ::value and ::format(), and format strings for everything
else is accessible via ::format(). This makes it backwards compatible.
diff --git a/docs/advanced.rst b/docs/advanced.rst
index aca1325..1620db7 100644
--- a/docs/advanced.rst
+++ b/docs/advanced.rst
@@ -1224,12 +1224,12 @@
     py::class_<Matrix>(m, "Matrix")
        .def_buffer([](Matrix &m) -> py::buffer_info {
             return py::buffer_info(
-                m.data(),                              /* Pointer to buffer */
-                sizeof(float),                         /* Size of one scalar */
-                py::format_descriptor<float>::value(), /* Python struct-style format descriptor */
-                2,                                     /* Number of dimensions */
-                { m.rows(), m.cols() },                /* Buffer dimensions */
-                { sizeof(float) * m.rows(),            /* Strides (in bytes) for each index */
+                m.data(),                               /* Pointer to buffer */
+                sizeof(float),                          /* Size of one scalar */
+                py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
+                2,                                      /* Number of dimensions */
+                { m.rows(), m.cols() },                 /* Buffer dimensions */
+                { sizeof(float) * m.rows(),             /* Strides (in bytes) for each index */
                   sizeof(float) }
             );
         });
@@ -1273,7 +1273,7 @@
             py::buffer_info info = b.request();
 
             /* Some sanity checks ... */
-            if (info.format != py::format_descriptor<Scalar>::value())
+            if (info.format != py::format_descriptor<Scalar>::format())
                 throw std::runtime_error("Incompatible format: expected a double array!");
 
             if (info.ndim != 2)
@@ -1299,7 +1299,7 @@
             m.data(),                /* Pointer to buffer */
             sizeof(Scalar),          /* Size of one scalar */
             /* Python struct-style format descriptor */
-            py::format_descriptor<Scalar>::value(),
+            py::format_descriptor<Scalar>::format(),
             /* Number of dimensions */
             2,
             /* Buffer dimensions */
@@ -1439,7 +1439,7 @@
         auto result = py::array(py::buffer_info(
             nullptr,            /* Pointer to data (nullptr -> ask NumPy to allocate!) */
             sizeof(double),     /* Size of one item */
-            py::format_descriptor<double>::value, /* Buffer format */
+            py::format_descriptor<double>::format(), /* Buffer format */
             buf1.ndim,          /* How many dimensions? */
             { buf1.shape[0] },  /* Number of elements for each dimension */
             { sizeof(double) }  /* Strides for each dimension */
@@ -1830,4 +1830,3 @@
 
     // Evaluate the statements in an separate Python file on disk
     py::eval_file("script.py", scope);
-
diff --git a/example/example-buffers.cpp b/example/example-buffers.cpp
index 2deee6f..fa3178b 100644
--- a/example/example-buffers.cpp
+++ b/example/example-buffers.cpp
@@ -81,7 +81,7 @@
         /// Construct from a buffer
         .def("__init__", [](Matrix &v, py::buffer b) {
             py::buffer_info info = b.request();
-            if (info.format != py::format_descriptor<float>::value() || info.ndim != 2)
+            if (info.format != py::format_descriptor<float>::format() || info.ndim != 2)
                 throw std::runtime_error("Incompatible buffer format!");
             new (&v) Matrix(info.shape[0], info.shape[1]);
             memcpy(v.data(), info.ptr, sizeof(float) * v.rows() * v.cols());
@@ -104,12 +104,12 @@
        /// Provide buffer access
        .def_buffer([](Matrix &m) -> py::buffer_info {
             return py::buffer_info(
-                m.data(),                              /* Pointer to buffer */
-                sizeof(float),                         /* Size of one scalar */
-                py::format_descriptor<float>::value(), /* Python struct-style format descriptor */
-                2,                                     /* Number of dimensions */
-                { m.rows(), m.cols() },                /* Buffer dimensions */
-                { sizeof(float) * m.rows(),            /* Strides (in bytes) for each index */
+                m.data(),                               /* Pointer to buffer */
+                sizeof(float),                          /* Size of one scalar */
+                py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
+                2,                                      /* Number of dimensions */
+                { m.rows(), m.cols() },                 /* Buffer dimensions */
+                { sizeof(float) * m.rows(),             /* Strides (in bytes) for each index */
                   sizeof(float) }
             );
         })
diff --git a/example/example20.cpp b/example/example20.cpp
index 201c470..77cda6b 100644
--- a/example/example20.cpp
+++ b/example/example20.cpp
@@ -47,7 +47,7 @@
 template <typename T>
 py::array mkarray_via_buffer(size_t n) {
     return py::array(py::buffer_info(nullptr, sizeof(T),
-                                     py::format_descriptor<T>::value(),
+                                     py::format_descriptor<T>::format(),
                                      1, { n }, { sizeof(T) }));
 }
 
@@ -80,9 +80,9 @@
 }
 
 void print_format_descriptors() {
-    std::cout << py::format_descriptor<SimpleStruct>::value() << std::endl;
-    std::cout << py::format_descriptor<PackedStruct>::value() << std::endl;
-    std::cout << py::format_descriptor<NestedStruct>::value() << std::endl;
+    std::cout << py::format_descriptor<SimpleStruct>::format() << std::endl;
+    std::cout << py::format_descriptor<PackedStruct>::format() << std::endl;
+    std::cout << py::format_descriptor<NestedStruct>::format() << std::endl;
 }
 
 void print_dtypes() {
diff --git a/include/pybind11/common.h b/include/pybind11/common.h
index ca5765a..32e8abf 100644
--- a/include/pybind11/common.h
+++ b/include/pybind11/common.h
@@ -204,7 +204,7 @@
     void *ptr;                   // Pointer to the underlying storage
     size_t itemsize;             // Size of individual items in bytes
     size_t size;                 // Total number of entries
-    std::string format;          // For homogeneous buffers, this should be set to format_descriptor<T>::value()
+    std::string format;          // For homogeneous buffers, this should be set to format_descriptor<T>::format()
     size_t ndim;                 // Number of dimensions
     std::vector<size_t> shape;   // Shape of the tensor (1 entry per dimension)
     std::vector<size_t> strides; // Number of entries between adjacent entries (for each per dimension)
@@ -349,18 +349,19 @@
 
 /// Format strings for basic number types
 #define PYBIND11_DECL_FMT(t, v) template<> struct format_descriptor<t> \
-    { static constexpr const char* value() { return v; } };
+    { static constexpr const char* value = v; /* for backwards compatibility */ \
+      static constexpr const char* 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() { return format; }
-    static constexpr const char format[2] =
+    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; }
 };
 
 template <typename T> constexpr const char format_descriptor<
-    T, typename std::enable_if<std::is_integral<T>::value>::type>::format[2];
+    T, typename std::enable_if<std::is_integral<T>::value>::type>::value[2];
 
 PYBIND11_DECL_FMT(float, "f");
 PYBIND11_DECL_FMT(double, "d");
diff --git a/include/pybind11/eigen.h b/include/pybind11/eigen.h
index db8f9eb..2ea7d48 100644
--- a/include/pybind11/eigen.h
+++ b/include/pybind11/eigen.h
@@ -133,7 +133,7 @@
                 /* Size of one scalar */
                 sizeof(Scalar),
                 /* Python struct-style format descriptor */
-                format_descriptor<Scalar>::value(),
+                format_descriptor<Scalar>::format(),
                 /* Number of dimensions */
                 1,
                 /* Buffer dimensions */
@@ -148,7 +148,7 @@
                 /* Size of one scalar */
                 sizeof(Scalar),
                 /* Python struct-style format descriptor */
-                format_descriptor<Scalar>::value(),
+                format_descriptor<Scalar>::format(),
                 /* Number of dimensions */
                 isVector ? 1 : 2,
                 /* Buffer dimensions */
@@ -276,7 +276,7 @@
             // Size of one scalar
             sizeof(Scalar),
             // Python struct-style format descriptor
-            format_descriptor<Scalar>::value(),
+            format_descriptor<Scalar>::format(),
             // Number of dimensions
             1,
             // Buffer dimensions
@@ -291,7 +291,7 @@
             // Size of one scalar
             sizeof(StorageIndex),
             // Python struct-style format descriptor
-            format_descriptor<StorageIndex>::value(),
+            format_descriptor<StorageIndex>::format(),
             // Number of dimensions
             1,
             // Buffer dimensions
@@ -306,7 +306,7 @@
             // Size of one scalar
             sizeof(StorageIndex),
             // Python struct-style format descriptor
-            format_descriptor<StorageIndex>::value(),
+            format_descriptor<StorageIndex>::format(),
             // Number of dimensions
             1,
             // Buffer dimensions
diff --git a/include/pybind11/numpy.h b/include/pybind11/numpy.h
index 19ba4de..cac19ee 100644
--- a/include/pybind11/numpy.h
+++ b/include/pybind11/numpy.h
@@ -164,8 +164,8 @@
                             !std::is_same<T, std::complex<float>>::value &&
                             !std::is_same<T, std::complex<double>>::value>::type>
 {
-    static const char *value() {
-        return detail::npy_format_descriptor<T>::format_str();
+    static const char *format() {
+        return detail::npy_format_descriptor<T>::format();
     }
 };
 
@@ -231,8 +231,8 @@
         return object(descr_(), true);
     }
 
-    static const char* format_str() {
-        return format_str_();
+    static const char* format() {
+        return format_();
     }
 
     static void register_dtype(std::initializer_list<field_descriptor> fields) {
@@ -256,7 +256,7 @@
         if (auto arr = (object) empty(int_(0), object(descr(), true)))
             if (auto view = PyMemoryView_FromObject(arr.ptr()))
                 if (auto info = PyMemoryView_GET_BUFFER(view)) {
-                    std::strncpy(format_str_(), info->format, 4096);
+                    std::strncpy(format_(), info->format, 4096);
                     return;
                 }
         pybind11_fail("NumPy: failed to extract buffer format");
@@ -264,7 +264,7 @@
 
 private:
     static inline PyObject*& descr_() { static PyObject *ptr = nullptr; return ptr; }
-    static inline char* format_str_() { static char s[4096]; return s; }
+    static inline char* format_() { static char s[4096]; return s; }
 };
 
 #define FIELD_DESCRIPTOR(Type, Field) \
@@ -480,7 +480,7 @@
             return cast(f(*((Args *) buffers[Index].ptr)...));
 
         array result(buffer_info(nullptr, sizeof(Return),
-                     format_descriptor<Return>::value(),
+                     format_descriptor<Return>::format(),
             ndim, shape, strides));
 
         buffer_info buf = result.request();