diff --git a/libs/sir/include/psemek/sir/trivial.hpp b/libs/sir/include/psemek/sir/trivial.hpp index 5ba80333..a621ce60 100644 --- a/libs/sir/include/psemek/sir/trivial.hpp +++ b/libs/sir/include/psemek/sir/trivial.hpp @@ -92,21 +92,35 @@ namespace psemek::sir } template - requires (is_ostream_v && !is_custom_v && !is_empty_v && is_trivial_v) - void write(Stream & s, T const & x) + requires (is_ostream_v) + void write_trivial(Stream & s, T const & x) { write_padding(s); s.write(reinterpret_cast(std::addressof(x)), sizeof(x)); } template - requires (is_istream_v && !is_custom_v && !is_empty_v && is_trivial_v) - void read(Stream & s, T & x) + requires (is_ostream_v && !is_custom_v && !is_empty_v && is_trivial_v) + void write(Stream & s, T const & x) + { + write_trivial(s, x); + } + + template + requires (is_istream_v) + void read_trivial(Stream & s, T & x) { read_padding(s); s.read(reinterpret_cast(std::addressof(x)), sizeof(x)); } + template + requires (is_istream_v && !is_custom_v && !is_empty_v && is_trivial_v) + void read(Stream & s, T & x) + { + read_trivial(s, x); + } + template void write_sequence(ostream & s, Iterator begin, Iterator end) {