https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116451
Bug ID: 116451
Summary: Missing conversion warning from std::exclusive_scan,
related to -Wsystem-headers
Product: gcc
Version: 14.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: heuristic42 at gmail dot com
Target Milestone: ---
Passing a different type to the init value of std::exclusive_scan should give a
warning. In the below example an int is used but the inputs and outputs are all
floats. The results are silently converted to an int and back.
Repro: https://godbolt.org/z/zabs7zT9z
#include <numeric>
#include <array>
void test() {
constexpr auto r = []() {
std::array<float, 2> a{0.5f, 0.0f};
std::array<float, 2> r;
std::exclusive_scan(a.begin(), a.end(), r.begin(), 0);
return r;
}();
static_assert(r[1] == 0.5f);
}
gcc would normally warn, and in fact does, if it weren't for the implementation
being in system headers. Unfortunately the problem is in the user code. Adding
-Wsystem-headers shows the desired warning.
This is similar to:
Bug 58876
Bug 82745
Bug 87614
Bug 95765
Many reference #pragma push/pop "-Wsystem-headers" as a possible workaround
Bug 80472
The underlying issue is to do with instantiating templates defined in system
headers
Bug 43167