Is it possible not to use snprintf or any other stdio functionalities to throw std::logic_error in standard library containers?

Jonathan Wakely jwakely@redhat.com
Thu May 20 19:52:32 GMT 2021


On 20/05/21 19:47 +0000, unlvsur unlvsur wrote:
>// I have disabled libstdcxx verbose
>
>#include<fast_io.h>
>
>int main(int argc,char** argv)
>{
>                std::string_view str(*argv);
>                puts(str.substr(4).data());
>}
>
>g++ -o b b.cc -Ofast -std=c++20 -s -flto -march=native -I../fast_io/include -static-libstdc++
>
>binary size 86kb
>
>
>#include<fast_io.h>
>
>int main(int argc,char** argv)
>{
>                std::string_view str(*argv);
>                if(str.size()<4)
>                                __builtin_trap();
>                puts(std::string_view(str.data()+4,str.size()).data());
>}
>
>g++ -o c c.cc -Ofast -std=c++20 -s -flto -march=native -I../fast_io/include -static-libstdc++
>
>binary size 15kb

OK, but it still doesn't use stdio.

__throw_out_of_range_fmt is defined in src/c++11/functexcept.cc which
uses __snprintf_lite defined in src/c++11/snprintf_lite.cc which
doesn't use stdio.





More information about the Libstdc++ mailing list