diff -ur graphite.org/src/inc/json.h graphite/src/inc/json.h
--- graphite.org/src/inc/json.h	2015-02-03 14:49:24.408101900 +0100
+++ graphite/src/inc/json.h	2015-02-03 14:50:59.697552200 +0100
@@ -78,6 +78,9 @@
     json & operator << (string) throw();
     json & operator << (number) throw();
     json & operator << (integer) throw();
+#ifdef _WIN64
+    json & operator << (size_t) throw();
+#endif
     json & operator << (long unsigned int d) throw();
     json & operator << (boolean) throw();
     json & operator << (_null_t) throw();
diff -ur graphite.org/src/json.cpp graphite/src/json.cpp
--- graphite.org/src/json.cpp	2015-02-03 14:49:24.409102000 +0100
+++ graphite/src/json.cpp	2015-02-03 14:50:49.814986900 +0100
@@ -119,6 +119,9 @@
 json & json::operator << (json::number f) throw()   { context(seq); fprintf(_stream, "%g", f); return *this; }
 json & json::operator << (json::integer d) throw()  { context(seq); fprintf(_stream, "%ld", d); return *this; }
 json & json::operator << (long unsigned d) throw()  { context(seq); fprintf(_stream, "%ld", d); return *this; }
+#ifdef _WIN64
+json & json::operator << (size_t d) throw()         { context(seq); fprintf(_stream, "%ld", d); return *this; }
+#endif
 json & json::operator << (json::boolean b) throw()  { context(seq); fputs(b ? "true" : "false", _stream); return *this; }
 json & json::operator << (json::_null_t) throw()    { context(seq); fputs("null",_stream); return *this; }
 
diff -ur graphite.org/src/Pass.cpp graphite/src/Pass.cpp
--- graphite.org/src/Pass.cpp	2015-02-03 14:49:24.413102200 +0100
+++ graphite/src/Pass.cpp	2015-02-03 14:50:37.873303900 +0100
@@ -466,7 +466,7 @@
     {
         if (r->rule->preContext > fsm.slots.context())  continue;
     *fsm.dbgout << json::flat << json::object
-                    << "id"     << r->rule - m_rules
+                    << "id"     << static_cast<size_t>(r->rule - m_rules)
                     << "failed" << true
                     << "input" << json::flat << json::object
                         << "start" << objectid(dslot(&fsm.slots.segment, input_slot(fsm.slots, -r->rule->preContext)))
@@ -480,7 +480,7 @@
 void Pass::dumpRuleEventOutput(const FiniteStateMachine & fsm, const Rule & r, Slot * const last_slot) const
 {
     *fsm.dbgout     << json::item << json::flat << json::object
-                        << "id"     << &r - m_rules
+                        << "id"     << static_cast<size_t>(&r - m_rules)
                         << "failed" << false
                         << "input" << json::flat << json::object
                             << "start" << objectid(dslot(&fsm.slots.segment, input_slot(fsm.slots, 0)))
