Inline trivial constructors
I was investigating a Chromium merge failure where an unused variable triggered a warning in Chromium but not google3: cl/276485378. It appears that in google3 the compiler will only flag unused variables if they are primitive types, or if the struct/class has an inline constexpr constructor. So I performed a quick audit of our code and made the most obvious examples follow this pattern.
gfe-relnote: inline constructors, no behavior change
PiperOrigin-RevId: 276787382
Change-Id: Ib59b54d390b0e89966d2a8ccac2f4d1eaa478893
diff --git a/quic/core/quic_packet_number.h b/quic/core/quic_packet_number.h
index 066d49c..8a75149 100644
--- a/quic/core/quic_packet_number.h
+++ b/quic/core/quic_packet_number.h
@@ -21,10 +21,15 @@
class QUIC_EXPORT_PRIVATE QuicPacketNumber {
public:
// Construct an uninitialized packet number.
- QuicPacketNumber();
+ constexpr QuicPacketNumber() : packet_number_(UninitializedPacketNumber()) {}
+
// Construct a packet number from uint64_t. |packet_number| cannot equal the
// sentinel value.
- explicit QuicPacketNumber(uint64_t packet_number);
+ explicit constexpr QuicPacketNumber(uint64_t packet_number)
+ : packet_number_(packet_number) {
+ DCHECK_NE(UninitializedPacketNumber(), packet_number)
+ << "Use default constructor for uninitialized packet number";
+ }
// Packet number becomes uninitialized after calling this function.
void Clear();
@@ -80,7 +85,9 @@
friend inline uint64_t operator-(QuicPacketNumber lhs, QuicPacketNumber rhs);
// The sentinel value representing an uninitialized packet number.
- static uint64_t UninitializedPacketNumber();
+ static constexpr uint64_t UninitializedPacketNumber() {
+ return std::numeric_limits<uint64_t>::max();
+ }
uint64_t packet_number_;
};