@@ -204,11 +204,12 @@ void EnumGenerator::GenerateDefinition(io::Printer* p) {
204204
205205 if (has_reflection_) {
206206 p->Emit (R"(
207- $dllexport_decl $const $pb$::EnumDescriptor* $nonnull$ $Msg_Enum$_descriptor();
207+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD $dllexport_decl $const $pb$::EnumDescriptor* $nonnull$ $Msg_Enum$_descriptor();
208208 )" );
209209 } else {
210210 p->Emit (R"cc(
211- $return_type$ $Msg_Enum$_Name($Msg_Enum$ value);
211+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD $return_type$
212+ $Msg_Enum$_Name($Msg_Enum$ value);
212213 )cc" );
213214 }
214215
@@ -230,7 +231,8 @@ void EnumGenerator::GenerateDefinition(io::Printer* p) {
230231 if (should_cache_ || !has_reflection_) {
231232 p->Emit ({{" static_assert" , write_assert}}, R"cc(
232233 template <typename T>
233- $return_type$ $Msg_Enum$_Name(T value) {
234+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD $return_type$
235+ $Msg_Enum$_Name(T value) {
234236 $static_assert$;
235237 return $Msg_Enum$_Name(static_cast<$Msg_Enum$>(value));
236238 }
@@ -242,7 +244,8 @@ void EnumGenerator::GenerateDefinition(io::Printer* p) {
242244 // pointers, so if the enum values are sparse, it's not worth it.
243245 p->Emit (R"cc(
244246 template <>
245- inline $return_type$ $Msg_Enum$_Name($Msg_Enum$ value) {
247+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD inline $return_type$
248+ $Msg_Enum$_Name($Msg_Enum$ value) {
246249 return $pbi$::NameOfDenseEnum<$Msg_Enum$_descriptor, $kMin$, $kMax$>(
247250 static_cast<int>(value));
248251 }
@@ -251,7 +254,8 @@ void EnumGenerator::GenerateDefinition(io::Printer* p) {
251254 } else {
252255 p->Emit ({{" static_assert" , write_assert}}, R"cc(
253256 template <typename T>
254- $return_type$ $Msg_Enum$_Name(T value) {
257+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD $return_type$
258+ $Msg_Enum$_Name(T value) {
255259 $static_assert$;
256260 return $pbi$::NameOfEnum($Msg_Enum$_descriptor(), value);
257261 }
@@ -260,7 +264,7 @@ void EnumGenerator::GenerateDefinition(io::Printer* p) {
260264
261265 if (has_reflection_) {
262266 p->Emit (R"cc(
263- inline bool $Msg_Enum$_Parse(
267+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD inline bool $Msg_Enum$_Parse(
264268 //~
265269 ::absl::string_view name, $Msg_Enum$* $nonnull$ value) {
266270 return $pbi$::ParseNamedEnum<$Msg_Enum$>($Msg_Enum$_descriptor(), name,
@@ -269,7 +273,7 @@ void EnumGenerator::GenerateDefinition(io::Printer* p) {
269273 )cc" );
270274 } else {
271275 p->Emit (R"cc(
272- bool $Msg_Enum$_Parse(
276+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD bool $Msg_Enum$_Parse(
273277 //~
274278 ::absl::string_view name, $Msg_Enum$* $nonnull$ value);
275279 )cc" );
@@ -323,7 +327,8 @@ void EnumGenerator::GenerateSymbolImports(io::Printer* p) const {
323327 .AnnotatedAs (enum_),
324328 },
325329 R"cc(
326- static inline bool $Enum$_IsValid(int value) {
330+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD static inline bool $Enum$_IsValid(
331+ int value) {
327332 return $Msg_Enum$_IsValid(value);
328333 }
329334 static constexpr $Enum_$ $Enum_MIN$ = $Msg_Enum$_$Enum$_MIN;
@@ -351,10 +356,11 @@ void EnumGenerator::GenerateSymbolImports(io::Printer* p) const {
351356
352357 p->Emit (R"cc(
353358 template <typename T>
354- static inline $return_type$ $Enum$_Name(T value) {
359+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD static inline $return_type$ $Enum$_Name(
360+ T value) {
355361 return $Msg_Enum$_Name(value);
356362 }
357- static inline bool $Enum$_Parse(
363+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD static inline bool $Enum$_Parse(
358364 //~
359365 ::absl::string_view name, $Enum_$* $nonnull$ value) {
360366 return $Msg_Enum$_Parse(name, value);
@@ -373,31 +379,36 @@ void EnumGenerator::GenerateIsValid(io::Printer* p) const {
373379 static_cast <int64_t >(sorted_unique_values_.size ()) - 1 ==
374380 sorted_unique_values_.back ()) {
375381 // They are sequential. Do a simple range check.
376- p->Emit ({{" min" , sorted_unique_values_.front ()},
377- {" max" , sorted_unique_values_.back ()}},
378- R"cc(
379- inline bool $Msg_Enum$_IsValid(int value) {
380- return $min$ <= value && value <= $max$;
381- }
382- )cc" );
382+ p->Emit (
383+ {{" min" , sorted_unique_values_.front ()},
384+ {" max" , sorted_unique_values_.back ()}},
385+ R"cc(
386+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD inline bool $Msg_Enum$_IsValid(
387+ int value) {
388+ return $min$ <= value && value <= $max$;
389+ }
390+ )cc" );
383391 } else if (sorted_unique_values_.front () >= 0 &&
384392 sorted_unique_values_.back () < 64 ) {
385393 // Not sequential, but they fit in a 64-bit bitmap.
386394 uint64_t bitmap = 0 ;
387395 for (int n : sorted_unique_values_) {
388396 bitmap |= uint64_t {1 } << n;
389397 }
390- p->Emit ({{" bitmap" , bitmap}, {" max" , sorted_unique_values_.back ()}},
391- R"cc(
392- inline bool $Msg_Enum$_IsValid(int value) {
393- return 0 <= value && value <= $max$ && (($bitmap$u >> value) & 1) != 0;
394- }
395- )cc" );
398+ p->Emit (
399+ {{" bitmap" , bitmap}, {" max" , sorted_unique_values_.back ()}},
400+ R"cc(
401+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD inline bool $Msg_Enum$_IsValid(
402+ int value) {
403+ return 0 <= value && value <= $max$ && (($bitmap$u >> value) & 1) != 0;
404+ }
405+ )cc" );
396406 } else {
397407 // More complex struct. Use enum data structure for lookup.
398408 p->Emit (
399409 R"cc(
400- inline bool $Msg_Enum$_IsValid(int value) {
410+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD inline bool $Msg_Enum$_IsValid(
411+ int value) {
401412 return $pbi$::ValidateEnum(value, $Msg_Enum$_internal_data_);
402413 }
403414 )cc" );
@@ -409,7 +420,8 @@ void EnumGenerator::GenerateMethods(int idx, io::Printer* p) {
409420
410421 if (has_reflection_) {
411422 p->Emit ({{" idx" , idx}}, R"cc(
412- const $pb$::EnumDescriptor* $nonnull$ $Msg_Enum$_descriptor() {
423+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD const $pb$::EnumDescriptor* $nonnull$
424+ $Msg_Enum$_descriptor() {
413425 $pbi$::AssignDescriptors(&$desc_table$);
414426 return $file_level_enum_descriptors$[$idx$];
415427 }
@@ -541,7 +553,8 @@ void EnumGenerator::GenerateMethods(int idx, io::Printer* p) {
541553 $entries_by_number$,
542554 };
543555
544- $return_type$ $Msg_Enum$_Name($Msg_Enum$ value) {
556+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD $return_type$
557+ $Msg_Enum$_Name($Msg_Enum$ value) {
545558 static const bool kDummy = $pbi$::InitializeEnumStrings(
546559 $Msg_Enum$_entries, $Msg_Enum$_entries_by_number, $num_unique$,
547560 $Msg_Enum$_strings);
@@ -553,7 +566,8 @@ void EnumGenerator::GenerateMethods(int idx, io::Printer* p) {
553566 return idx == -1 ? $pbi$::GetEmptyString() : $Msg_Enum$_strings[idx].get();
554567 }
555568
556- bool $Msg_Enum$_Parse(::absl::string_view name, $Msg_Enum$* $nonnull$ value) {
569+ PROTOBUF_FUTURE_ADD_EARLY_NODISCARD bool $Msg_Enum$_Parse(
570+ ::absl::string_view name, $Msg_Enum$* $nonnull$ value) {
557571 int int_value;
558572 bool success = $pbi$::LookUpEnumValue(
559573 $Msg_Enum$_entries, $num_declared$, name, &int_value);
0 commit comments