clang++-5.0 を入れたのに C++17 が有効にならない

タイトルの通りで、 std::is_arithmetic_v を含むコードを clang++-5.0 でコンパイルしたらエラーが出た。 clang はバージョン 5.0 でC++17 に対応しているはずなのにおかしい。

原因は C++ の標準ライブラリが C++17 に対応していないことにあった。 clang++ はデフォルトだと標準ライブラリとして libstdc++ を用いるが、 このバージョンが自分の環境だと 5.4 で C++17 に対応していなかった。

というわけで新しい libstdc++ を入れたら直った。

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install libstdc++-8-dev

標準ライブラリとして llvm の libc++ を使う手もあるが、 ppa が用意されていないためインストールがめんどくさいのでやめた。

参考資料

Clang - C++17, C++14, C++11 and C++98 Status

c++ - clang seems to use the gcc libraries - Stack Overflow