[Bug c++/93589] Template instantiation creates a conversion warning when it should not
lokeshjanghel91 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Feb 5 10:16:00 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93589
--- Comment #2 from Lokesh Janghel <lokeshjanghel91 at gmail dot com> ---
>Note your example code does not match the warning message you have in comment #0.
Sorry, I used some reduce test case. here is the correct one:
$ g++ -Wconversion test.cpp
test.cpp: In instantiation of ‘void print_byte_order(T) [with T = short int]’:
test.cpp:12:28: required from here
test.cpp:7:8: warning: conversion to ‘short int’ from ‘int’ may alter its value
[-Wconversion]
val |= (CHAR_BIT * static_cast<T>(i)) << (CHAR_BIT * static_cast<T>(i));
^
>Does clang warn even in a non-template case?
I reduce the test case for non-template:
#define CHAR_BIT 8
void print_byte_order( short )
{
short val = 0;
unsigned i = 1;
val |= (CHAR_BIT * static_cast<short>(i)) << (CHAR_BIT *
static_cast<short>(i));
}
That gives warning in GCC but Clang not.
More information about the Gcc-bugs
mailing list