Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #71000
| Newsgroups | comp.lang.c++ |
|---|---|
| Date | 2020-01-02 23:14 -0800 |
| References | <quiidc$qa1$1@news.albasani.net> <1yyPF.127450$QU2.87340@fx01.iad> |
| Message-ID | <480ef1d4-c8fa-4d08-bc06-35f7199446a2@googlegroups.com> (permalink) |
| Subject | Re: Is there a way to determine endianess in a constexpr-function ? |
| From | Öö Tiib <ootiib@hot.ee> |
On Friday, 3 January 2020 05:29:08 UTC+2, Pavel wrote:
> Bonita Montero wrote:
> > Is there a way to determine endianess in a constexpr-function
> > which might return true for little endian and false for big
> > endian? I guess not, but maybe I din't consider a trick here.
> Why not, it's actually not difficult.
>
> Below is a simple example (actually returns true for big endian) but I think
> more complex checks can be built upon same principle.
>
> #include <cstdint>
> #include <iostream>
> using namespace std;
>
> enum ProbeEnum : int16_t { ProbeValue = 0x0100 };
> constexpr union {
> ProbeEnum p;
> char ca[2];
> } ProbeVal{ProbeValue};
>
> constexpr
> bool
> IsBigEndian()
> {
> return !!ProbeVal.ca[0];
> }
>
> int
> main(int, char*[])
> {
> cout << "IsBigEndian=" << IsBigEndian() << endl;
>
>
> return 0;
> }
In C++ type punning through union is undefined behavior. Type punning
through reinterpret cast to pointer of bytes and type punning through
memcpy are valid but are not constexpr in C++. So I feel that your code
has undefined behavior.
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Is there a way to determine endianess in a constexpr-function ? Bonita Montero <Bonita.Montero@gmail.com> - 2020-01-01 17:46 +0100
Re: Is there a way to determine endianess in a constexpr-function ? Bo Persson <bo@bo-persson.se> - 2020-01-01 18:49 +0100
Re: Is there a way to determine endianess in a constexpr-function ? Bonita Montero <Bonita.Montero@gmail.com> - 2020-01-01 18:54 +0100
Re: Is there a way to determine endianess in a constexpr-function ? David Brown <david.brown@hesbynett.no> - 2020-01-01 23:21 +0100
Re: Is there a way to determine endianess in a constexpr-function ? Robert Wessel <robertwessel2@yahoo.com> - 2020-01-01 18:26 -0600
Re: Is there a way to determine endianess in a constexpr-function ? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-01-02 00:47 +0000
Re: Is there a way to determine endianess in a constexpr-function ? Pavel <pauldontspamtolk@removeyourself.dontspam.yahoo> - 2020-01-02 22:28 -0500
Re: Is there a way to determine endianess in a constexpr-function ? Siri Cruise <chine.bleu@yahoo.com> - 2020-01-02 19:51 -0800
Re: Is there a way to determine endianess in a constexpr-function ? Öö Tiib <ootiib@hot.ee> - 2020-01-02 23:14 -0800
Re: Is there a way to determine endianess in a constexpr-function ? Bonita Montero <Bonita.Montero@gmail.com> - 2020-01-03 08:31 +0100
Re: Is there a way to determine endianess in a constexpr-function ? Bonita Montero <Bonita.Montero@gmail.com> - 2020-01-03 08:43 +0100
Re: Is there a way to determine endianess in a constexpr-function ? Pavel <pauldontspamtolk@removeyourself.dontspam.yahoo> - 2020-01-05 00:51 -0500
Re: Is there a way to determine endianess in a constexpr-function ? Bonita Montero <Bonita.Montero@gmail.com> - 2020-01-05 07:43 +0100
Re: Is there a way to determine endianess in a constexpr-function ? Bonita Montero <Bonita.Montero@gmail.com> - 2020-01-05 08:31 +0100
Re: Is there a way to determine endianess in a constexpr-function ? Bonita Montero <Bonita.Montero@gmail.com> - 2020-01-05 08:34 +0100
Re: Is there a way to determine endianess in a constexpr-function ? Bonita Montero <Bonita.Montero@gmail.com> - 2020-01-05 08:38 +0100
csiph-web