Add documentation re: PYBIND11_DTYPE macro
diff --git a/docs/advanced.rst b/docs/advanced.rst
index 1620db7..649454c 100644
--- a/docs/advanced.rst
+++ b/docs/advanced.rst
@@ -1358,6 +1358,30 @@
 into an array satisfying the specified requirements instead of trying the next
 function overload.
 
+NumPy structured types
+======================
+
+In order for ``py::array_t`` to work with structured (record) types, we first need
+to register the memory layout of the type. This could be done via ``PYBIND11_DTYPE``
+macro which expects the type followed by field names:
+
+.. code-block:: cpp
+
+    struct A {
+        int x;
+        double y;
+    };
+
+    struct B {
+        int z;
+        A a;
+    };
+
+    PYBIND11_DTYPE(A, x, y);
+    PYBIND11_DTYPE(B, z, a);
+
+    /* now both A and B can be used as template arguments to py::array_t */
+
 Vectorizing functions
 =====================