SpresenseのArduino Platformで、`std::string`クラスを使おうと思い、`#include
<string>`したところコンパイルエラーが発生しました。

C++標準ライブラリですが、利用不可でしょうか？

**Code:**

```

    #include <string>
    
    void setup() {
      // put your setup code here, to run once:
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    
    }
    
```

**Error message:**

```

    In file included from c:\users\takashi\documents\arduinodata\packages\spresense\tools\gcc-arm-none-eabi\5.4.1\windows\arm-none-eabi\include\c++\5.4.1\bits\stl_algobase.h:61:0,
    
                     from c:\users\takashi\documents\arduinodata\packages\spresense\tools\gcc-arm-none-eabi\5.4.1\windows\arm-none-eabi\include\c++\5.4.1\bits\char_traits.h:39,
    
                     from c:\users\takashi\documents\arduinodata\packages\spresense\tools\gcc-arm-none-eabi\5.4.1\windows\arm-none-eabi\include\c++\5.4.1\string:40,
    
                     from C:\Users\takashi\AppData\Local\Temp\arduino_modified_sketch_278803\sketch_jul17a.ino:1:
    
    c:\users\takashi\documents\arduinodata\packages\spresense\tools\gcc-arm-none-eabi\5.4.1\windows\arm-none-eabi\include\c++\5.4.1\bits\cpp_type_traits.h:168:12: error: redefinition of 'struct std::__is_integer<unsigned char>'
    
         struct __is_integer<unsigned char>
    
                ^
    
    c:\users\takashi\documents\arduinodata\packages\spresense\tools\gcc-arm-none-eabi\5.4.1\windows\arm-none-eabi\include\c++\5.4.1\bits\cpp_type_traits.h:147:12: error: previous definition of 'struct std::__is_integer<unsigned char>'
    
         struct __is_integer<bool>
    
                ^
    
```

（Sony developer forumにも[ポスト](https://forum.developer.sony.com/topic/72/std-
string-class)しています）
CC BY-SA 4.0
2019-07-24T00:42:04.640
56852
2021-10-25T01:31:25.493
35219
question
spresense
<string>をincludeするとコンパイルエラーになる
Arduinoの場合、String Objectを使うようです。

<https://www.arduino.cc/reference/en/language/variables/data-
types/stringobject/>

これは普通に使えましたよ。
CC BY-SA 4.0
2019-07-24T04:53:34.633
56856
2019-07-24T04:53:34.633
32281
56852
answer
エラーメッセージを読んでみました。

> > c:\users\takashi\documents\arduinodata\packages\spresense\tools\gcc-arm-
> none-eabi\5.4.1\windows\arm-none-
> eabi\include\c++\5.4.1\bits\cpp_type_traits.h:168:12: error: redefinition of
> 'struct std::__is_integer'  
>  struct __is_integer

[直訳]エラー：'struct std::__is_integer'が再定義されてます。

```

         struct __is_integer<unsigned char>
    
```

> c:\users\takashi\documents\arduinodata\packages\spresense\tools\gcc-arm-
> none-eabi\5.4.1\windows\arm-none-
> eabi\include\c++\5.4.1\bits\cpp_type_traits.h:147:12: error: previous
> definition of 'struct std::__is_integer'  
>  struct __is_integer

[直訳]エラー：'struct std::__is_integer'の以前の定義は

```

    　　struct __is_integer<bool>
    
```

＝＝  
"struct __is_integer < unsigned char>" と "struct __is_integer< bool>"
の定義が被っているから駄目だと言っている訳ですが、 素直に読むと"unsigned char" と "bool" は別の型ですから被らないですよね。

それが被るということは、"unsigned char" と "bool"は、同じだという宣言がされているのだと思います。  
ヘッダファイルの中に

```

    #def bool unsigned char
    
```

か

```

    #def unsigned char bool
    
```

という行がありませんか？ あったら、その行をコメントアウトしてください。  
そうすれば、エラーが消えると思います。
CC BY-SA 4.0
2019-12-21T02:04:54.420
61632
2019-12-21T02:04:54.420
217
56852
answer
根本解決にはならなさそうですが、Fumu 7さんのご回答を参考に  
cpp_type_traits.hの中の、__is_integerを削除してみたところ、  
正常にstringがinclude出来ました。  
__is_integerを使う用事が無いのでしたら、お試しされるのはいかがでしょうか。

ライブラリ作成されているとなると、他の方は使う事が出来なくなってしまいますが・・・
CC BY-SA 4.0
2020-03-04T13:03:15.283
63565
2020-03-04T13:03:15.283
37799
56852
answer
Arduinoはソースの拡張子がinoですが、cppも使えると思います。  
拡張子cppの別ファイルに#include を書き、それをinoからコールできないでしょうか？
CC BY-SA 4.0
2020-03-05T08:18:45.117
63594
2020-03-05T08:18:45.117
24490
56852
answer
コミュニティBotが、この投稿をアクティブにして目についたので、ちょっと試してみました。

提示された次のコードを最新のボードパッケージ（2.3.0）で試してみたら問題なくコンパイルできました。

```

    #include <string>
    
    void setup() {
      // put your setup code here, to run once:
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    
    }
    
```

どこかのタイミングで対応したようですね。
CC BY-SA 4.0
2021-10-25T01:31:25.493
83241
2021-10-25T01:31:25.493
27334
56852
answer