Boost
A vast collection of peer-reviewed C++ libraries, many of which became the standard library.
What it is
Boost is a collection of peer-reviewed, portable C++ libraries that extend the functionality of the C++ Standard Library. It provides utilities for smart pointers, threading, regular expressions, file system operations, and more.
Boost provides a wide range of libraries covering various domains: smart pointers, containers, algorithms, threading, asynchronous I/O, serialization, date/time, filesystem, and more. Each library has its own API, and many can be used header-only.
- Licence
- Boost Software License
- Best known for
- Being the proving ground for future C++ standard features
When to use it
The question documentation cannot answer for you — because it cannot recommend something else.
Reach for it when
- You need something the standard library lacks — Asio networking, Graph, Spirit parsing, multiprecision
- The project already depends on it
Look elsewhere when
- You only need one small piece — Boost is large and slows compilation noticeably
- Modern C++ already covers it: `std::optional`, `std::variant`, `std::filesystem` and smart pointers all began here
Installation
sudo apt install libboost-all-devGetting started
The smallest useful thing you can do with it, and what each part means.
#include <boost/shared_ptr.hpp>
#include <iostream>
int main() {
boost::shared_ptr<int> ptr(new int(10));
std::cout << *ptr << std::endl;
return 0;
}#include <boost/filesystem.hpp>
#include <iostream>
int main() {
boost::filesystem::path p("test.txt");
if (boost::filesystem::exists(p)) {
std::cout << p << " exists." << std::endl;
}
return 0;
}Advanced usage
Where the library earns its place over a simpler alternative.
#include <boost/thread.hpp>
#include <iostream>
void threadFunction() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
boost::thread t(threadFunction);
t.join();
return 0;
}#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main() {
boost::regex expr("\\d+");
std::string s = "There are 123 apples";
boost::smatch match;
if(boost::regex_search(s, match, expr)) {
std::cout << match[0] << std::endl;
}
return 0;
}// Using Boost.Asio for networking or asynchronous operations via io_context and sockets.Errors and fixes
The failures you are most likely to hit, and what actually resolves them.
- boost::filesystem::filesystem_error
- Occurs when filesystem operations fail. Check paths, permissions, and existence.
- boost::bad_weak_ptr
- Thrown when a shared_ptr or weak_ptr is misused. Ensure proper ownership semantics.
Best practices
- Use header-only libraries when possible for simplicity.
- Prefer Boost smart pointers over raw pointers for memory safety.
- Combine Boost.Asio with modern C++ async/await or futures for network programming.
- Check compatibility with C++ Standard version for each Boost library.
- Keep Boost libraries updated as they frequently improve performance and fix bugs.
Alternatives
Comparable options, and the reason you would pick one over the other.
The C++ standard library
Check first — much of Boost has been absorbed into it
Background
Why it exists, and what it was reacting to.
Boost was initiated in 1998 by a group of C++ experts to provide high-quality, reusable C++ libraries. Many Boost libraries have been proposed and incorporated into the C++ Standard Library (C++11 and onwards). Boost emphasizes performance, portability, and robustness.
