The latest C++ standard C++20 introduces a lot of new language features, unfortunately at the moment the GNU Compiler Collection (gcc) has no support for several of these new features (like the long awaited modules for example).
To use these new feature you’ll need to install the latest snapshot of the gcc-11 compiler. You will need to compile the compiler manually since it’s probably not available in your distro’s repository.
For Debian/GNU Linux and derived distro’s you can follow these instructions
First install the prerequisites with APT:
sudo apt install libgmp-dev libmpfr-dev libmpc-dev flex bison gawk byacc elfutils gdc texi2html apt-file debtags cmake build-essential
Next we download the latest snapshot and extract the archive and compile it (this can take some time). If the mirror you use to download the archive also offers a sha512.sum file you should also download that one, so you can verify the download.
sha512sum -c sha512.sum --ignore-missing tar xf gcc-11-20210404.tar.xz cd gcc-11-20210404/ mkdir build cd build ../configure --prefix=/opt/gcc-11 --enable-languages=c,c++,fortran --disable-multilib --program-suffix=-11 make -j 8 sudo make install sudo ln -s /opt/gcc-11/lib64/libstdc++.so.6.0.29 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.29 sudo ldconfig
Adapt the name of the archive to the correct one and adapt the argument to make -j to reflect the number of cores/threads you CPU has, this will lower the compile time a lot (for example on a MacBook Air (2014) without this option compilation will take hours.
If you have various compilers installed you can use update-alternatives to quickly switch between compilers (this is handy since the gcc-11 compiler is not released as stable and will crash on occasion).
sudo update-alternatives --install /usr/bin/gcc gcc /opt/gcc-11/bin/gcc 11 sudo update-alternatives --install /usr/bin/g++ g++ /opt/gcc-11/bin/g++ 11
You can switch between compilers with
sudo update-alternatives --config gcc sudo update-alternatices --config g++
Compiling could be done with the following command:
g++ -Wall -Wextra -fmodules-ts -std=gnu++20 -pedantic -static-libstdc++ main.cpp -oProgramName
You can leave the options
-Wall -Wextra and -pedantic options from the command (they just give more warnings and error reports).