/awesome-modern-cpp

A collection of resources on modern C++

Primary LanguageHTML



Awesome Modern C++

A collection of resources on modern C++.

The goal is to collect a list of resources to help people learn about and leverage modern C++11 and beyond.

Contributing

To add, remove or change things on the list: please submit a pull request to the GitHub repository.

Best Practices

Books

For a comprehensive guide to C++ books see the Stackoverflow Definitive C++ Book Guide and List.

Community

Conferences

  • ACCU - The Conference for Developers.
  • C++ CoreHard (Minsk ๐Ÿ‡ง๐Ÿ‡พ, Telegram) - conference dedicated to C++ and related hardcore technologies.
  • C++ Now (Aspen, Colorado ๐Ÿ‡บ๐Ÿ‡ธ, YouTube, Twitter) - A gathering of C++ experts and enthusiasts.
  • C++ on Sea (Folkestone, Kent ๐Ÿ‡ฌ๐Ÿ‡ง, YouTube, Twitter) - The international C++ conference in the UK, by the sea.
  • Core C++ (Tel-Aviv ๐Ÿ‡ฎ๐Ÿ‡ฑ)
  • CppCon (Aurora, Colorado ๐Ÿ‡บ๐Ÿ‡ธ, YouTube, Twitter) - The C++ Conference.
  • Meeting C++ (Berlin ๐Ÿ‡ฉ๐Ÿ‡ช, YouTube, Twitter) - A independent C++ Conference.

Talks

TODO curate list of good talks on how to simplify code using C++11/17/20 features

Blogs

Podcasts

Websites

Libraries

This is not supposed to be a comprehensive list of all C and C++ libraries. It is a list of high-quality modern libraries with general applicability (serialization, database, testing, etc) or high-quality libraries with novel use of new C++ features.

Kitchensink / Framework

  • abseil - Abseil is an open-source collection of C++ code (compliant to C++11) designed to augment the C++ standard library.
  • Boost - Collection of C++ libraries.
  • Folly - Facebook Open-source Library.
  • POCO - The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems.
  • nonstd-lite - Parent of *-lite repositories, a migration path to post-C++11 features for pre-C++11 environments

Testing

  • Approval Tests for C++ - Native ApprovalTests for C++ on Linux, Mac and Windows.
  • autocheck - QuickCheck and SmallCheck clones for C++.
  • Bandit - A header-only framework for C++11 that wants to make working with unit tests a pleasant experience.
  • Boost.Test - Boost testing framework.
  • Catch ๐Ÿ”ฅ - A modern, C++-native, header-only, framework for unit-tests, TDD and BDD.
  • doctest ๐Ÿš€ - The fastest feature-rich C++11/14/17/20 single-header testing framework for unit tests and TDD.
  • Fakeit - C++ mocking made easy. A simple yet very expressive, headers only library for c++ mocking.
  • Googletest - Google Testing and Mocking Framework.
  • rapidcheck - QuickCheck clone for C++.

Benchmarking

Libraries and frameworks for creating micro-benchmarks.

  • Celero - C++ Benchmark Authoring Library/Framework.
  • Google Benchmark ๐ŸŒŸ - A microbenchmark support library.
  • hayai - the C++ benchmarking framework.
  • Nonius - A C++ micro-benchmarking framework. C++ Benchmark Authoring Library/Framework.

Logging

  • spdlog - Fast C++ logging library.

Threading

  • concurrentqueue - A fast multi-producer, multi-consumer lock-free concurrent queue for C++11.
  • Cpp-Taskflow - Modern C++ Parallel Task Programming Library
  • Junction - Concurrent data structures in C++.
  • MPMCQueue - A bounded multi-producer multi-consumer lock-free queue written in C++11.
  • SPSCQueue - A bounded single-producer single-consumer wait-free and lock-free queue written in C++11.
  • Threading Building Blocks - Threading Building Blocks (TBB) is a C++ template library developed by Intel for parallel programming on multi-core processors. Using TBB, a computation is broken down into tasks that can run in parallel. The library manages and schedules threads to execute these tasks.

Serialization

  • json - JSON for Modern C++.
  • jsoncpp - A C++ library for interacting with JSON.
  • tinytoml -A header only C++11 library for parsing TOML.
  • yaml-cpp - A YAML parser and emitter in C++.
  • cpptoml - A header-only library for parsing TOML configuration files.
  • cereal - A C++11 library for serialization.

String formatting & templating

  • {fmt} - Small, safe and fast formatting library.
  • Inja - A Template Engine for Modern C++.
  • Mustache - Mustache text templates in C++11.
  • tinyformat.h - Minimal, type safe printf replacement library for C++.

Scripting

  • sol2 - C++ library binding to Lua.
  • ChaiScript - An easy to use embedded scripting language for C++.
  • pybind11 - Seamless operability between C++11 and Python.

Web / HTTP

  • Beast - HTTP and WebSocket built on Boost.Asio in C++11.
  • cpprestsdk - The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
  • cpr - C++ Requests: Curl for People, a spiritual port of Python Requests.
  • Drogon - A C++14/17 based, high-performance HTTP application framework
  • oat++ - High-performance Web framework (C++11, zero-dependency).
  • pistache - An elegant C++ REST framework.
  • restbed - Restbed framework brings asynchronous RESTful functionality to C++11 applications.

Database

  • mongo-cxx-driver - C++ Driver for MongoDB.
  • redox - Modern, asynchronous, and wicked fast C++11 client for Redis.
  • sqlite_orm - powerful header only SQLite3 ORM library for C++14.
  • sqlite3pp - C++ wrapper of SQLite3 API.
  • sqlpp11 - A type safe SQL template library for C++.

Misc

  • ASAP - header-only library to parse, display, operate and iterate on dates.
  • BigIntegerCPP - A C++11 large integer library with effective high performance, simplistic in nature and also clean in the eyes.
  • CAF - An Open Source Implementation of the Actor Model in C++.
  • Cinder - Cinder is a free and open source library for professional-quality creative coding in C++.
  • Conduit - High Performance Streams Based on Coroutine TS.
  • cppitertools - itertools (python) implementation for C++14
  • cxxopts - Lightweight C++ command line option parser.
  • date - A date and time library based on the C++11/14/17 header.
  • docopt.cpp - docopt creates beautiful command-line interfaces.
  • EnTT - A header-only, fast and, reliable entity-component system (ECS) for modern C++.
  • HashLib4CPP - C++11 library that provides an easy to use interface for computing hashes and checksums of strings, files, streams, bytearrays and untyped data to mention but a few. It also supports Incremental Hashing.
  • IntX - A C++11 port of IntX arbitrary precision Integer library with speed, about O(N * log N) multiplication/division algorithms implementation.
  • iod - Meta programming utilities for C++14.
  • Magic Enum - Static reflection for enums (to string, from string, iteration) for modern C++, work with any enum type without any macro or boilerplate code.
  • Nameof - A header-only C++17 library provides nameof macros and functions to obtain the simple name of variable, type, function, macro, and enum.
  • PEGTL - Parsing Expression Grammar Template Library (C++11, header-only).
  • random - A simple, convenient, header only Random for modern C++.
  • rang - A simple, modern & header only C++11 library for colors in your terminal.
  • range-v3 - Experimental range library for C++11/14/17.
  • simple_match - Simple header only pattern matching for c++14.
  • tweeny - A header only interpolation library with 30+ easing functions.
  • Vireo - A lightweight and versatile video processing library by Twitter.

Tools

Misc

  • clang-format ๐ŸŒŸ - A tool to format C++ code.
  • clangd - understands your C++ code and adds smart features to your editor: code completion, compile errors, go-to-definition and more.
  • Compiler Explorer - Interactively explore the assembly output of your C++ code.
  • cquery - C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more
  • irony-mode - A C/C++ minor mode for Emacs powered by libclang.
  • modern-cpp-font-lock-mode - Syntax highlighting support for Modern C++ with emacs
  • sanitizers ๐ŸŒŸ - This project is the home for Sanitizers: AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer, and more.
  • Valgrind - is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. You can also use Valgrind to build new tools.
  • cppcheck - is a static analysis tool for C/C++ code. It provides unique code analysis to detect bugs and focuses on detecting undefined behaviour and dangerous coding constructs.
  • clang-tidy ๐ŸŒŸ - is a clang-based C++ โ€œlinterโ€ tool. Its purpose is to provide an extensible framework for diagnosing and fixing typical programming errors, like style violations, interface misuse, or bugs that can be deduced via static analysis. clang-tidy is modular and provides a convenient interface for writing new checks.
  • clang-analyzer - is a source code analysis tool that finds bugs in C, C++, and Objective-C programs. It implements path-sensitive, inter-procedural analysis based on symbolic execution technique.
  • American fuzzy lop - American fuzzy lop is a security-oriented fuzzer.
  • hongfuzz - A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer with interesting analysis options.
  • libFuzzer - A library for coverage-guided fuzz testing.
  • build2 - is a cross-platform build toolchain for developing and packaging C and C++ code.
  • CMake ๐ŸŒŸ - Cross-platform family of tools designed to build, test and package software.
  • Meson - is an open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible.
  • Buckaroo - Fully Decentralized Polyglot Package Manager for C++ and Friends
  • C++ Archive Network - CPPAN - Cross-platform C/C++ package manager.
  • cget - CMake package retrieval.
  • conan - C/C++ package manager.
  • CPM - A CMake script for setup-free cross-plattform dependency management.
  • Hunter - Cross-platform package manager for C++.
  • vcpkg - C++ Library Manager for Windows, Linux, and MacOS

About

This list was compiled by Erik Rigtorp with help from the C++ community: