diff --git a/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h b/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h
index 6eb5c5cacde31986485ce8e0edf5933692d1a441..d1a85106f16802da239b7202e7aeaf7431981f23 100644
--- a/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h
+++ b/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h
@@ -103,4 +103,13 @@ AsapoHandlerHolder<std::string>* handle_or_null_t(const std::string& object,
 }
 
 
+
+template<typename u, typename t>
+constexpr bool operator==(const u& lhs, const t& rhs) {
+    return static_cast<typename std::make_unsigned<u>::type>(lhs)
+           == static_cast<typename std::make_unsigned<typename std::underlying_type<t>::type>::type>(rhs);
+}
+
+
+
 #endif
diff --git a/consumer/api/cpp/src/consumer_c_glue.cpp b/consumer/api/cpp/src/consumer_c_glue.cpp
index 7edbfe800694bf7eb2899db1388c14b43a2a14e7..a60cbbb7e8b0e2efe76a60a5d824837803f459ff 100644
--- a/consumer/api/cpp/src/consumer_c_glue.cpp
+++ b/consumer/api/cpp/src/consumer_c_glue.cpp
@@ -52,11 +52,6 @@ typedef AsapoHandlerHolder<asapo::ConsumerErrorData>* AsapoConsumerErrorDataHand
 
 #include <algorithm>
 
-template<typename t>
-constexpr bool operator==(const unsigned int& lhs, const t& rhs) {
-    return lhs == static_cast<typename std::make_unsigned<typename std::underlying_type<t>::type>::type>(rhs);
-}
-
 #define dataGetterStart \
     asapo::MessageData d; \
     asapo::MessageMeta* fi = info ? new asapo::MessageMeta : nullptr; \
diff --git a/producer/api/cpp/src/producer_c_glue.cpp b/producer/api/cpp/src/producer_c_glue.cpp
index 67c58df01e8b6f2e3a8d675a9d30c706e213c2a5..debd7d1ee1ebbcaabf01c8a5d466ed54f1ce34ed 100644
--- a/producer/api/cpp/src/producer_c_glue.cpp
+++ b/producer/api/cpp/src/producer_c_glue.cpp
@@ -14,6 +14,35 @@ typedef AsapoHandlerHolder<asapo::MessageHeader>* AsapoMessageHeaderHandle;
 
 extern "C" {
 #include "asapo/producer_c.h"
+    static_assert(kOpcodeUnknownOp == asapo::Opcode::kOpcodeUnknownOp&&
+                  kOpcodeTransferData == asapo::Opcode::kOpcodeTransferData&&
+                  kOpcodeTransferDatasetData == asapo::Opcode::kOpcodeTransferDatasetData&&
+                  kOpcodeStreamInfo == asapo::Opcode::kOpcodeStreamInfo&&
+                  kOpcodeLastStream == asapo::Opcode::kOpcodeLastStream&&
+                  kOpcodeGetBufferData == asapo::Opcode::kOpcodeGetBufferData&&
+                  kOpcodeAuthorize == asapo::Opcode::kOpcodeAuthorize&&
+                  kOpcodeTransferMetaData == asapo::Opcode::kOpcodeTransferMetaData&&
+                  kOpcodeDeleteStream == asapo::Opcode::kOpcodeDeleteStream&&
+                  kOpcodeGetMeta == asapo::Opcode::kOpcodeGetMeta&&
+                  kOpcodeCount == asapo::Opcode::kOpcodeCount,
+                  "incompatible bit reps between c++ and c for asapo::OpCode");
+    static_assert(kTcp == asapo::RequestHandlerType::	              kTcp&&
+                  kFilesystem == asapo::RequestHandlerType::	              kFilesystem,
+                  "incompatible bit reps between c++ and c for asapo::RequestHandlerType");
+
+    static_assert(kInsert == asapo::MetaIngestOp::kInsert&&
+                  kReplace == asapo::MetaIngestOp::kReplace&&
+                  kUpdate == asapo::MetaIngestOp::kUpdate,
+                  "incompatible bit reps between c++ and c for asapo::MetaIngestOp");
+
+    static_assert(None == asapo::LogLevel::None&&
+                  Error == asapo::LogLevel::Error&&
+                  Info == asapo::LogLevel::Info&&
+                  Debug == asapo::LogLevel::Debug&&
+                  Warning == asapo::LogLevel::Warning,
+                  "incompatible bit reps between c++ and c for asapo::LogLevel");
+
+
     AsapoProducerHandle asapo_create_producer(const char* endpoint,
                                               uint8_t n_processing_threads,
                                               AsapoRequestHandlerType type,