This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Question on enabling c++ to_string to arm-none-eabi target


On Thu, Oct 31, 2013 at 7:50 PM, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> On 31 October 2013 10:10, Terry Guo wrote:
>>
>> The stdio.h from Newlib defines vscanf function as:
>>
>> #if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L)
>> int     _EXFUN(vscanf, (const char *, __VALIST)
>>                _ATTRIBUTE ((__format__ (__scanf__, 1, 0))));
>> #endif
>>
>> And the libstdc++-v3 configuration always uses option -std=c++98 to
>> compile above code, this option indicate the define of
>> __STRICT_ANSI__. So always fail to compile above code with error
>> message:
>>
>> conftest.cpp:36:19: error: 'vscanf' was not declared in this scope
>>   vscanf("%i", args);
>
>
> We have to use -std=c++xx not -std=gnu++xx (and so define
> __STRICT_ANSI__) because users might want to use that, and we have to
> know if the functions are available in all cases.
>
>
>> Finally failing to compile the conftest.cpp causes the disable of c++
>> to_string function. So what should I do to let those conftest.cpp
>> pass? By changing option from -std=c++98 to -std=gnu++98 or removing
>> the IF macros from stdio.h? Please help. Thanks in advance.
>
>
> Using -std=gnu++98 would not be correct, because the functions would
> still not be defined if users compile with -std=c++11 (which also
> defines __STRICT_ANSI__), so GCC would build OK but users would get
> errors when they compile.
>
> It has been suggested in the past that we might want to split up the
> _GLIBCXX_USE_C99 test to be more fine-grained.  For example, C99
> features needed by C++11-only features (such as std::to_string) could
> test using -std=c++11, which sets __cplusplus to 201103L, and a
> conforming C library should enable the full C99 library in that case
> (it looks like newlib wouldn't though, that's a bug in newlib.)
>
> Alternatively, we could predefine __STDC_VERSION__ to 199901L to
> coerce newlib into providing the C99 library (it's
> implementation-defined whether that is defined by C++ implementations
> or not.)

Thanks for your valuable help. I know the reason now.

BR,
Terry


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]