protocolbuffers/protobuf

Signed / unsigned comparison warning on MSVC

Open

#15 028 ouverte le 11 déc. 2023

Voir sur GitHub
 (1 commentaire) (0 réactions) (0 assignés)C++ (16 128 forks)batch import
c++help wanted

Métriques du dépôt

Stars
 (71 223 stars)
Métriques de merge PR
 (Merge moyen 2j 11h) (185 PRs mergées en 30 j)

Description

What version of protobuf and what language are you using? Version: v25.1 (actually a bit after, main from 20231123. Relevant code hasn't changed since then) Language: C++

What operating system (Linux, Windows, ...) and version? Windows 11 Pro 22H2

What runtime / compiler are you using (e.g., python version or gcc version) MS Visual Studio 17.8.0 (tool version 14.37.32822)

What did you do? Compile something that makes use of include/google/protobuf/map.h

What did you expect to see Warning-free compilation

What did you see instead? Warnings from Abseil : include\absl\log\internal\check_op.h(340,1): warning C4018: '>=': signed/unsigned mismatch This is from an Abseil macro that generates Check_GEImpl(), used in map.h

Anything else we should know about your project / environment

map.h line 1041 (in current main) invokes

ABSL_DCHECK_GE(new_num_buckets, kMinTableSize);

the first arg is map_index_t which resolves to uint32_t, whereas the second is defined at line 528 as

enum { kMinTableSize = 16 / sizeof(void*) };

I'm guess MSVC is choosing a signed type for the enum which is causing the problem. Changing it to

enum : unsigned int { kMinTableSize = 16 / sizeof(void*) };

makes the warnings go away

Guide contributeur