質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

C++で#include<numeric>をしようとすると、「'__countr_zero' is not a member of 'std'」というエラーが出る

TON
TON

総合スコア3

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0グッド

0クリップ

283閲覧

投稿2022/11/30 00:13

質問

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

int32_t

2022/11/30 00:27

どういうコマンドラインでコンパイルされてますか?
TON

2022/11/30 00:41

g++ main.cpp といった様にしています。
jbpb0

2022/11/30 01:00 編集

> 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) でコンパイルしたら、エラー出ませんでした
TON

2022/11/30 01:04

自己解決することができました。同ディレクトリ内にあったbitというcppファイルが悪さをしていた様です。 こちらの不注意で時間を取らせてしまい申し訳ございません。 質問を見て考えてくださりありがとうございました。
jbpb0

2022/11/30 01:13 編集

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ファイル がインクルードされてしまってたのですかね
TON

2022/11/30 01:23

そこまで考えていただきありがとうございます! そのように考えるとしっくりきますね。__countl_zeroはどこから出てきたのかと考えていましたが、<bit>の中にあるとは検討もしませんでした...
int32_t

2022/11/30 01:27

#include <> なら、普通はカレントディレクトリを最初に見たりしない気がしますね。環境変数などでインクルードファイル検索パスを指定しているんでしょうか。
TON

2022/11/30 01:36

詳しくは把握できていないのですが、昔にVSCodeで#include<bits/stdc++.h>を使えるようにした時、#include<>一般についてもパスを弄ったのかもしれません。

回答1

1

自己解決

同じディレクトリ内にbitというcppファイルが生成されていることに気がつき、そのファイルを削除してみると、どういうわけかエラーが取れました。

この質問を見て考えてくださった方々、ありがとうございました。

投稿2022/11/30 01:00

TON

総合スコア3

int32_t👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。