nicer code separation, cleanup logic, std::function type caster
diff --git a/tools/mkdoc.py b/tools/mkdoc.py
index 4f47575..d1b61c9 100644
--- a/tools/mkdoc.py
+++ b/tools/mkdoc.py
@@ -212,7 +212,13 @@
 #define __DOC3(n1, n2, n3)                       __doc_##n1##_##n2##_##n3
 #define __DOC4(n1, n2, n3, n4)                   __doc_##n1##_##n2##_##n3##_##n4
 #define __DOC5(n1, n2, n3, n4, n5)               __doc_##n1##_##n2##_##n3##_##n4_##n5
-#define DOC(...)                                 __CAT2(__DOC, __VA_SIZE(__VA_ARGS__))(__VA_ARGS__)''')
+#define DOC(...)                                 __CAT2(__DOC, __VA_SIZE(__VA_ARGS__))(__VA_ARGS__)
+
+#if defined(__GNUG__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#endif
+''')
 
     output = []
     for filename in filenames:
@@ -226,3 +232,9 @@
     output.sort()
     for l in output:
         print(l)
+
+    print('''
+#if defined(__GNUG__)
+#pragma GCC diagnostic pop
+#endif
+''')