質問
VSCodeのCode Runnnerを用いて
c++
1#include<numeric>
を実行したところ、以下のようなエラーメッセージが出ました。
<numeric>の内部には全く触れていないはずなのですが、<numeric>に問題があるようなエラーが出て首を傾げております。
Code Runnerを用いずに実行してみてもエラーが出てしまいます。
gccの再インストールをしてみてもうまくいかず...
原因としてどのようなことが考えられるでしょうか。
エラーメッセージ
In file included from main.cpp:1: /usr/local/Cellar/gcc/12.2.0/include/c++/12/numeric: In function 'constexpr _Tp std::__detail::__gcd(_Tp, _Tp)': /usr/local/Cellar/gcc/12.2.0/include/c++/12/numeric:129:28: error: '__countr_zero' is not a member of 'std' 129 | const int __i = std::__countr_zero(__m); | ^~~~~~~~~~~~~ /usr/local/Cellar/gcc/12.2.0/include/c++/12/numeric:131:28: error: '__countr_zero' is not a member of 'std' 131 | const int __j = std::__countr_zero(__n); | ^~~~~~~~~~~~~ /usr/local/Cellar/gcc/12.2.0/include/c++/12/numeric:149:24: error: '__countr_zero' is not a member of 'std' 149 | __n >>= std::__countr_zero(__n); | ^~~~~~~~~~~~~
補足情報
macOS Ventura 13.0.1
VSCode 1.71.2
C++17
g++ (Homebrew GCC 12.2.0) 12.2.0
どういうコマンドラインでコンパイルされてますか?
g++ main.cpp
といった様にしています。
> Code Runnerを用いずに実行してみてもエラーが出てしまいます。
> g++ (Homebrew GCC 12.2.0) 12.2.0
当方のmacで、
#include<numeric>
int main() {return 0;}
という内容のファイルを作って、
gcc version 11.2.0 (Homebrew GCC 11.2.0_1)
でコンパイルしたら、エラー出ませんでした
自己解決することができました。同ディレクトリ内にあったbitというcppファイルが悪さをしていた様です。
こちらの不注意で時間を取らせてしまい申し訳ございません。
質問を見て考えてくださりありがとうございました。
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/numeric
の70行目で
# include <bit>
してて、本来ならば
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/bit
がインクルードされて、それの248行目に
__countr_zero(_Tp __x) noexcept
があるのですが、そのファイルではなく、
> 同ディレクトリ内にあったbitというcppファイル
がインクルードされてしまってたのですかね
そこまで考えていただきありがとうございます!
そのように考えるとしっくりきますね。__countl_zeroはどこから出てきたのかと考えていましたが、<bit>の中にあるとは検討もしませんでした...
#include <> なら、普通はカレントディレクトリを最初に見たりしない気がしますね。環境変数などでインクルードファイル検索パスを指定しているんでしょうか。
詳しくは把握できていないのですが、昔にVSCodeで#include<bits/stdc++.h>を使えるようにした時、#include<>一般についてもパスを弄ったのかもしれません。
回答1件
あなたの回答
tips
プレビュー