Hello Timo, >If the namespace name is the only relevant thing that changed, this will >work and is (IMHO) a quite elegant solution to the current dilemma. >However, if there is genuine ABI breakage, it will just paper over the >issue and cause bugs downstream, so we need to check that first.
I think I already checked that long time ago, I don't see breakages, but other experts might want to have another look please >There is a spectrum with the current solution (each release is an >implicit ABI bump) at the one end and this proposal (no ABI versioning >at all) at the other. > >Personally, I would prefer the middle ground with a namespace tag that >has an independent ABI version that gets bumped like a SONAME, because >you can never have two different versions of nlohmann-json interfering >in the same binary (for example, because two libraries happen to use >them internally and do not hide their private symbols properly). > >In practise, it will most likely not be an issue unless the Release Team >forgets to BinNMU a library that uses nlohmann-json as private >dependency (becauses vendored copies in third party libraries will >probably keep the default namespace versioning). So proper versioning >for nlohmann-json is not the hill I'm going to die defending. ;) Question, isn't this covered by #ifndef JSON_SKIP_LIBRARY_VERSION_CHECK #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 #warning "Already included a different version of the library!" #endif #endif #endif #define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) #define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum) #define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) code? G.

