[Bug c++/88012] New: Expected -Wnarrowing not given inside template class method
vz-gcc at zeitlins dot org
gcc-bugzilla@gcc.gnu.org
Tue Nov 13 22:05:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88012
Bug ID: 88012
Summary: Expected -Wnarrowing not given inside template class
method
Product: gcc
Version: 8.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: vz-gcc at zeitlins dot org
Target Milestone: ---
Host: x86_64-linux-gnu
Target: x86_64-linux-gnu
Using Debian 8.2.0-9 the following code compiles without any errors or
warnings:
% cat -n narrowing.cpp
1 using Number = unsigned int;
2
3 template <int>
4 struct S {
5 S() {
6 const Number x = {-1}; (void)x;
7 }
8 };
9
10 int main() {
11 S<1> s;
12 // const Number y = {-1}; (void)y;
13 }
% g++-8 -Wall -c narrowing.cpp
% # i.e. no diagnostic output
Uncommenting the line 12 results in the expected error:
% g++-8 -Wall -c narrowing.cpp
narrowing.cpp: In function ‘int main()’:
narrowing.cpp:12:25: error: narrowing conversion of ‘-1’ from ‘int’ to ‘Number’
{aka ‘unsigned int’} inside { } [-Wnarrowing]
const Number y = {-1}; (void)y;
^
AFAICS the same error should be given for the same code inside S ctor but
somehow the narrowing conversion is not detected there.
Sorry in advance if I'm missing something, but I couldn't find any reason for
this code to be accepted, so reporting it here because it looks like a bug to
me.
FWIW both clang 7 and MSVS 15.7 do report the expected error (and the former
even does it twice for some reason...).
More information about the Gcc-bugs
mailing list