Date: Sun, 21 Jul 2019 00:03:42 +0200
Hi Jonny,
std::format origins from libfmt (https://github.com/fmtlib/fmt/). The
syntax is related to other format libraries that have prooven useful
like pythons string.format for example.
The main goal is to get the typesafety from iostreams but the convenient
format strings of printf like approaches.
Booleans are by default formatted with their textual representation
(true|false), so the following is sufficient:
std::string s = std::format("{}", true);
which is kinda neat :) (you do not need type information within the
formatting string which is great for typesafety!)
Cheers,
Sebastian
On 2019-07-20 23:51, Jonny Grant via Std-Proposals wrote:
> Hi Garrett
>
> Many thanks for the reply with link.
>
> std::format could be good good, I hadn't heard. Currently I had always
> needed to use my own variadic std::string str_sprintf().
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r9.html#Syntax
>
> Saw this
> std::string s = std::format("{:s}", true);
>
> It looks like different syntax to printf % style is being used. Don't
> think that is ideal...
> But at least bool is in..
>
> Cheers, Jonny
>
> On 20/07/2019 22:24, Garrett May via Std-Proposals wrote:
>
> Hi Jonny,
>
> With respect to std::to_string, please see a reference to it here:
> https://en.cppreference.com/w/cpp/string/basic_string/to_string
>
> std::to_string appears to be defined specifically for primitive numeric
> types that match up to using sprintf and a format specifier. I don't
> think that std::to_string(bool) would be suitable, as it does not have
> a format specifier like the others. And there is also the possibility
> that when converting a bool to a string that the user genuinely want
> '0' or '1' to be produced, as they may be trying to handle the result
> as data.
>
> As Jake said, there is a format library coming out for C++20. That
> sounds like a more desirable way to handle this problem, as like I
> mentioned, choosing how one wants a bool to be represented textually is
> similar to how one would want a float or a double represented
> textually.
>
> Regards,
>
> Garrett
>
> On Sat, 20 Jul 2019, 21:39 Jonny Grant via Std-Proposals,
> <std-proposals_at_[hidden]> wrote:
> Hi Garrett
>
> Many thanks for your reply.
>
> Yes, I see std::boolalpha sets an I/O flag.. but seems a bit of a long
> way to get it into a string, I'd need to use in conjunction with
> std::istringstream to get a string...
>
> I wanted to do something like this example:
>
> IDEA
> std::string fmt(const std::string header, bool b)
> {
> return header + " " + std::to_string(b) + " set";
> }
>
> HOW I WOULD DO NOW
> As his doesn't work, I'd have it at present as:
> std::string fmt(const std::string header, bool b)
> {
> return header + " " + b?"true":"false" + " set";
> }
>
> Regards, Jonny
>
> On 20/07/2019 21:21, Garrett May via Std-Proposals wrote:
>
> std::boolalpha is already available:
>
> int main(){
> bool const a = true;
> std::cout << std::boolalpha << a << std::endl;
> }
>
> My gut instinct here is that one is supposed to control how one wants
> data to be printed out, in the same way as how float/double precision
> is done.
>
> On Sat, 20 Jul 2019, 21:16 Jonny Grant via Std-Proposals,
> <std-proposals_at_[hidden]> wrote: Hello
>
> Could std::string to_string(bool value); be added? Currently it
> outputs
> as a number due to the implicit conversion to int?
> Feel it would have been more appropriate as "true" or "false".
>
> http://www.cplusplus.com/reference/string/to_string/
>
> $ g++-8 -Wall -o to_string to_string.cpp
> $ ./to_string
> 1
>
> // g++-8 -Wall -o to_string to_string.cpp
> #include <string>
> #include <iostream>
> int main()
> {
> const bool a = true;
> const std::string b(std::to_string(a));
> std::cout << b << std::endl;
> }
>
> Cheers, Jonny
>
> .
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> http://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
--
Std-Proposals mailing list
Std-Proposals_at_[hidden]
http://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
std::format origins from libfmt (https://github.com/fmtlib/fmt/). The
syntax is related to other format libraries that have prooven useful
like pythons string.format for example.
The main goal is to get the typesafety from iostreams but the convenient
format strings of printf like approaches.
Booleans are by default formatted with their textual representation
(true|false), so the following is sufficient:
std::string s = std::format("{}", true);
which is kinda neat :) (you do not need type information within the
formatting string which is great for typesafety!)
Cheers,
Sebastian
On 2019-07-20 23:51, Jonny Grant via Std-Proposals wrote:
> Hi Garrett
>
> Many thanks for the reply with link.
>
> std::format could be good good, I hadn't heard. Currently I had always
> needed to use my own variadic std::string str_sprintf().
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r9.html#Syntax
>
> Saw this
> std::string s = std::format("{:s}", true);
>
> It looks like different syntax to printf % style is being used. Don't
> think that is ideal...
> But at least bool is in..
>
> Cheers, Jonny
>
> On 20/07/2019 22:24, Garrett May via Std-Proposals wrote:
>
> Hi Jonny,
>
> With respect to std::to_string, please see a reference to it here:
> https://en.cppreference.com/w/cpp/string/basic_string/to_string
>
> std::to_string appears to be defined specifically for primitive numeric
> types that match up to using sprintf and a format specifier. I don't
> think that std::to_string(bool) would be suitable, as it does not have
> a format specifier like the others. And there is also the possibility
> that when converting a bool to a string that the user genuinely want
> '0' or '1' to be produced, as they may be trying to handle the result
> as data.
>
> As Jake said, there is a format library coming out for C++20. That
> sounds like a more desirable way to handle this problem, as like I
> mentioned, choosing how one wants a bool to be represented textually is
> similar to how one would want a float or a double represented
> textually.
>
> Regards,
>
> Garrett
>
> On Sat, 20 Jul 2019, 21:39 Jonny Grant via Std-Proposals,
> <std-proposals_at_[hidden]> wrote:
> Hi Garrett
>
> Many thanks for your reply.
>
> Yes, I see std::boolalpha sets an I/O flag.. but seems a bit of a long
> way to get it into a string, I'd need to use in conjunction with
> std::istringstream to get a string...
>
> I wanted to do something like this example:
>
> IDEA
> std::string fmt(const std::string header, bool b)
> {
> return header + " " + std::to_string(b) + " set";
> }
>
> HOW I WOULD DO NOW
> As his doesn't work, I'd have it at present as:
> std::string fmt(const std::string header, bool b)
> {
> return header + " " + b?"true":"false" + " set";
> }
>
> Regards, Jonny
>
> On 20/07/2019 21:21, Garrett May via Std-Proposals wrote:
>
> std::boolalpha is already available:
>
> int main(){
> bool const a = true;
> std::cout << std::boolalpha << a << std::endl;
> }
>
> My gut instinct here is that one is supposed to control how one wants
> data to be printed out, in the same way as how float/double precision
> is done.
>
> On Sat, 20 Jul 2019, 21:16 Jonny Grant via Std-Proposals,
> <std-proposals_at_[hidden]> wrote: Hello
>
> Could std::string to_string(bool value); be added? Currently it
> outputs
> as a number due to the implicit conversion to int?
> Feel it would have been more appropriate as "true" or "false".
>
> http://www.cplusplus.com/reference/string/to_string/
>
> $ g++-8 -Wall -o to_string to_string.cpp
> $ ./to_string
> 1
>
> // g++-8 -Wall -o to_string to_string.cpp
> #include <string>
> #include <iostream>
> int main()
> {
> const bool a = true;
> const std::string b(std::to_string(a));
> std::cout << b << std::endl;
> }
>
> Cheers, Jonny
>
> .
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> http://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
--
Std-Proposals mailing list
Std-Proposals_at_[hidden]
http://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
Received on 2019-07-20 17:05:38