[Bug libstdc++/93479] New: compare_three_way allows comparing arrays
barry.revzin at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Jan 28 16:22:00 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93479
Bug ID: 93479
Summary: compare_three_way allows comparing arrays
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: barry.revzin at gmail dot com
Target Milestone: ---
This program:
#include <compare>
bool check(int(&x)[4], int(&y)[4]) {
return std::compare_three_way{}(x, y) == 0;
}
Successfully compiles, with check() doing an address comparison on x and y. But
compare_three_way is just the function object for <=> and x <=> y is ill-formed
(gcc correctly rejects that).
The check for __3way_builtin_ptr_cmp needs to reject arrays, since the
expression declval<T>() <=> declval<U>() does not resolve to a built-in
operator comparing pointers (it doesn't resolve to any operator).
More information about the Gcc-bugs
mailing list