boostorg / boostorg/pfr

offset_based_getter produces wrong result with clang on non-X86 platform

Offen
#153 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
C++
Sterne
1.5k
Forks
176
Ø Merge
5 T. 21 Std.
Gemergte PRs (30 T.)
1

Beschreibung

The attached mini reproducer fails if compiled with Clang-16 on non-X86 platform:

```
#include
#include

#include

struct user_type {
char c;
double d;
};

int main() {
using pfr_tuple = boost::pfr::detail::sequence_tuple::tuple;
using getter = boost::pfr::detail::offset_based_getter;
using boost::pfr::detail::size_t_;
using boost::pfr::detail::sequence_tuple::get;

user_type value{};
auto begin = reinterpret_cast(&value);
auto native_offset = reinterpret_cast(&value.d) - begin;

auto getter_offset = reinterpret_cast(&getter{}.get(value, size_t_<1>{})) - begin;
if (native_offset != getter_offset) {
printf("native_offset != getter_offset ('%li' != '%li')\n", native_offset, getter_offset);
printf("FAIL\n");
} else {
printf("PASS\n");
}
}
```
Test output is:
```
native_offset != getter_offset ('8' != '4')
FAIL
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.