File tree Expand file tree Collapse file tree 3 files changed +26
-5
lines changed Expand file tree Collapse file tree 3 files changed +26
-5
lines changed Original file line number Diff line number Diff line change @@ -14,7 +14,13 @@ namespace detail {
14
14
virtual string_view path () const = 0;
15
15
virtual Result<monostate, internal_error> read_bytes (bspan buffer, off_t offset) const = 0;
16
16
17
- template <typename T, typename std::enable_if<std::is_trivial<T>::value && !is_span<T>::value, int >::type = 0 >
17
+ template <
18
+ typename T,
19
+ typename std::enable_if<
20
+ std::is_standard_layout<T>::value && std::is_trivially_copyable<T>::value && !is_span<T>::value,
21
+ int
22
+ >::type = 0
23
+ >
18
24
Result<T, internal_error> read (off_t offset) {
19
25
T object{};
20
26
auto res = read_bytes (make_bspan (object), offset);
@@ -24,7 +30,13 @@ namespace detail {
24
30
return object;
25
31
}
26
32
27
- template <typename T, typename std::enable_if<std::is_trivial<T>::value, int >::type = 0 >
33
+ template <
34
+ typename T,
35
+ typename std::enable_if<
36
+ std::is_standard_layout<T>::value && std::is_trivially_copyable<T>::value,
37
+ int
38
+ >::type = 0
39
+ >
28
40
Result<monostate, internal_error> read_span (span<T> items, off_t offset) {
29
41
return read_bytes (
30
42
make_span (reinterpret_cast <char *>(items.data ()), reinterpret_cast <char *>(items.data () + items.size ())),
Original file line number Diff line number Diff line change @@ -82,7 +82,10 @@ namespace detail {
82
82
return {begin, count};
83
83
}
84
84
85
- template <typename T, typename std::enable_if<std::is_trivial<T>::value && !is_span<T>::value, int >::type = 0 >
85
+ template <
86
+ typename T,
87
+ typename std::enable_if<std::is_trivially_copyable<T>::value && !is_span<T>::value, int >::type = 0
88
+ >
86
89
span<char > make_bspan (T& object) {
87
90
return span<char >(reinterpret_cast <char *>(std::addressof (object)), sizeof (object));
88
91
}
Original file line number Diff line number Diff line change @@ -147,7 +147,13 @@ namespace detail {
147
147
}
148
148
149
149
// TODO: Re-evaluate use of off_t
150
- template <typename T, typename std::enable_if<std::is_trivial<T>::value, int >::type = 0 >
150
+ template <
151
+ typename T,
152
+ typename std::enable_if<
153
+ std::is_standard_layout<T>::value && std::is_trivially_copyable<T>::value,
154
+ int
155
+ >::type = 0
156
+ >
151
157
Result<T, internal_error> load_bytes (std::FILE* object_file, off_t offset) {
152
158
T object;
153
159
if (std::fseek (object_file, offset, SEEK_SET) != 0 ) {
@@ -210,7 +216,7 @@ namespace detail {
210
216
// <= 19.23 msvc also appears to fail (but for a different reason https://godbolt.org/z/6Y5EvdWPK)
211
217
// <= 19.39 msvc also has trouble with it for different reasons https://godbolt.org/z/aPPPT7z3z
212
218
typename std::enable_if<
213
- std::is_standard_layout<T>::value && std::is_trivial <T>::value,
219
+ std::is_standard_layout<T>::value && std::is_trivially_copyable <T>::value,
214
220
int
215
221
>::type = 0 ,
216
222
typename std::enable_if<
You can’t perform that action at this time.
0 commit comments