[Bug c++/95242] New: [10 Regression] spurious "warning: zero as null pointer constant [-Wzero-as-null-pointer-constant]" on comparisons with -std=c++2a

gcc at mattwhitlock dot name gcc-bugzilla@gcc.gnu.org
Wed May 20 18:24:50 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95242

            Bug ID: 95242
           Summary: [10 Regression] spurious "warning: zero as null
                    pointer constant [-Wzero-as-null-pointer-constant]" on
                    comparisons with -std=c++2a
           Product: gcc
           Version: 10.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gcc at mattwhitlock dot name
  Target Milestone: ---
              Host: x86_64-pc-linux-gnu
            Target: x86_64-pc-linux-gnu
             Build: x86_64-pc-linux-gnu

/* BEGIN bug.cpp */

#include <chrono>
#include <string>

bool bug(std::chrono::milliseconds lhs, std::chrono::milliseconds rhs) {
        return lhs < rhs; // spurious "warning: zero as null pointer constant"
}

bool bug(std::string::const_iterator lhs, std::string::const_iterator rhs) {
        return lhs < rhs; // spurious "warning: zero as null pointer constant"
}

/* END bug.cpp */


$ g++ -std=c++2a -Wzero-as-null-pointer-constant -c bug.cpp
bug.cpp: In function 'bool bug(std::chrono::milliseconds,
std::chrono::milliseconds)':
bug.cpp:5:15: warning: zero as null pointer constant
[-Wzero-as-null-pointer-constant]
    5 |  return lhs < rhs; // spurious "warning: zero as null pointer constant"
      |               ^~~
bug.cpp: In function 'bool
bug(std::__cxx11::basic_string<char>::const_iterator,
std::__cxx11::basic_string<char>::const_iterator)':
bug.cpp:9:15: warning: zero as null pointer constant
[-Wzero-as-null-pointer-constant]
    9 |  return lhs < rhs; // spurious "warning: zero as null pointer constant"
      |               ^~~


$ g++ --version | head -n1
g++ (Gentoo 10.1.0 p1) 10.1.0


The bug is not present in G++ 9.3, and it also is not present in G++ 10.1 in
-std=c++17 (or earlier) mode. This leads me to believe it may be related to the
new three-way comparison operator functionality.


More information about the Gcc-bugs mailing list