WerWolv / PatternLanguage

The Pattern Language used by the ImHex Hex Editor
https://imhex.werwolv.net
GNU Lesser General Public License v2.1
165 stars 43 forks source link

Template parameters (and locals) are unintuitively affected by endianness #119

Open BobSmun opened 3 weeks ago

BobSmun commented 3 weeks ago
import std.io;
struct Test<auto t> {
    std::print("{}", t);
    u32 a = t;
};

le Test<5> test1;
be Test<5> test2;

std::print("{} {}",test1,test2);

results in:

I: 5
I: 5
I: bitfield Test { a = 5, t = 5 } bitfield Test { a = 83886080, t = 6646139978924579364519035301401722880 }

Inside the template, the parameter is read the same way (both being 5). This works as expected and allows consistent used for e.g. bitfield lengths.

However, the endianness seems to take effect when reading the template parameters (and locals) from outside the template. This makes it difficult to determine what they were, such as from a format function