The reason why I created this project is that I miss sum types in C all the time, literally everywhere I need a custom error type or just any other alternative data representation. And I do think the implementation of datatype99 is straightforward -- only long names, all the dirty hacks are encapsulated into the underlying framework.
And sure enough, the code is unreadable and unmaintainable as you'd expect.
You can build Boost out of C99 macros. There's a really good reason why you shouldn't.