VScodeでC++20を使えるようになりたい
解決したいこと
最近VScode(Win11,Ver1.89.1)を使って競プロ(AtCoder)の勉強を始めました.そこでABC348のC問題の解説を読んだところ,c++20から追加された関数が使用されていました.
そこで自分のVScodeに打ち込んでプログラムを実行しようとしたところ,下の画像のようなエラーが出てしまいました.
自分なりに調べたところVScodeで使用しているC++のバージョンが,C++17であることが原因ではないかと考えました.
自分で調べて少し手を動かしてみたのですが解決できなかったので,何かアドバイスがある方は是非ご教授いただけると幸いです.
以下試してみたことを書きます.何かもっと情報が必要な場合は教えてください.
試してみたこと
まず以下のコードを実行し,VScodeで使用しているC++のバージョンを調べました.
#include <iostream>
int main()
{
std::cout << __cplusplus << std::endl;
return 0;
}
その結果次のような実行結果が得られました.
201703
このことから使用しているバージョンはC++17であるとわかりました.
次にこちらのページを参考にしてsettings.jsonの設定を変更しました.具体的には,"code-runner.executorMap"内の"cpp"の部分を
"cd $dir && g++ $fileName -std=c++20 -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
のように書き換えました.参考にしたページではこれで解決していたのですが,私の環境では解決しませんでした.この時点でお手上げ状態になってしまったので何か気づいたことがあればご教授いただけると幸いです.
追記
1.
参考にしたページではsettigns.jsonの
"cd $dir && g++ $fileName -std=c++20 -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
内の-std=c++20の部分が-std=c++2aになっている件について.
⇒参考にしたページの通りに変更しても状況は改善しませんでした.
一応解決?
いろいろいじっていたらうまくいくようになりました.ただし,自分でもよくわからないうちに解決したのでその疑問とともに記述しておきます.
1.そもそもCode Runnerを使えていなかった?
一つ目の解決策として,tasks.json内の"args"の設定を以下のように変更したら解決しました.
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
2行目("-g",の前の行)に-std=c++20を追加.その状態でファイルを実行したところ
202002
という実行結果が得られ,C++20が使用できていることがわかりました.
なぜか解決したのか自分の考え
普段ファイルを実行する際に画像の再生ボタンを押して実行していました.
このボタンを単純に押した場合下の画像のプルダウンの中では一番下の「C/C++ファイルの実行」を選択していたのと同じ状態であったのかと思います.
その状態の場合コンパイルはCode Runnerを使用していなかったのではないかと思われ,そのためsettings.json内の設定を変更しても反映されていませんでした.
2.Run Codeを使用する
settings.jsonの設定を「試してみたこと」で記した内容に変更したのち,「Ctrl+Alt+N」を押してファイルを実行したところ,
202002
という実行結果がえられ,c++20が使用できていることが確認できました.