I really like using header-only libraries, as they are really easy to use (no linker issues or having to compile the library separately). For example most of the Boost library is header-only. But then again there are some parts, like boost::python, which requires to be build before. Is this a design choice or a technical necessity?
I gave Boost as an example but would appreciate a more general answer if possible.