Skip to content

Commit 2dae92f

Browse files
committed
🐛 Make field_name assignment operation const
Problem: - `field_name` is an empty type, and `field_name` assignment is an overloaded operator that returns a different type. Without making it `const`-qualified it cannot be called on template arguments. Solution: - `const`-qualify `field_name::operator=`.
1 parent eccb19c commit 2dae92f

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

include/msg/message.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ template <stdx::ct_string Name> struct field_name {
128128
using name_t = stdx::cts_t<Name>;
129129

130130
// NOLINTNEXTLINE(misc-unconventional-assign-operator)
131-
template <typename T> constexpr auto operator=(T value) {
131+
template <typename T> constexpr auto operator=(T value) const {
132132
return field_value<Name, T>{value};
133133
}
134134

test/msg/message.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@ TEST_CASE("construct with field values", "[message]") {
7272
CHECK(0x0042'd00d == data[1]);
7373
}
7474

75+
TEST_CASE("use field names as template args", "[message]") {
76+
auto msg = []<auto F>() {
77+
return test_msg{F = 0xba11};
78+
}.template operator()<"f1"_field>();
79+
80+
auto const data = msg.data();
81+
CHECK(0x8000'ba11 == data[0]);
82+
}
83+
7584
TEST_CASE("construct with field defaults", "[message]") {
7685
test_msg msg{};
7786

0 commit comments

Comments
 (0)