Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #71000

Re: Is there a way to determine endianess in a constexpr-function ?

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>

Show all headers | View raw


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


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