None of these are necessarily connected. Asio is a *general purpose* library, and precisely as John Kalb outlined in his recent C++Now talk it *should* not box you in or accept non-zero overhead of abstraction. However, when you consume it, you *pick* how you want to use it in your domain. You implement your RESTful API, with all the classical implementation fire-walling of separate TUs, no issue. I imagine you might need to include your JSON library of
....
In short, unlike `const`, header-only isn't contagious.
I explain my point: the proposed library as beast and and as asio suffer from major serious design flaws. They use static polymorphism instead of dynamic everywhere while for ASIO being a low level library it may be reasonable) for higher level protocols it is totally problematic. And this is a huge issue Here example: https://github.com/rjahanbakhshi/boost.taar/blob/master/example/tls_server.c... If you want to support lets say both SSL and TCP you need to "compile" against two statically polymorph classes. It is a very poor design if all your complex app needs to be "templated per "connection type" This takes static polymorphism to level of abuse especially there is 0 "performance gain" can be made as all is transferred to system calls that ironically handles dynamic polymorphism over file descriptor. So this is the main issue. "header only" is only a symptom. Real problem is abuse of static polymorphism. Artyom