[Bug c++/88365] New: -Wsign-conversion ignores implicit conversion

igor.chorazewicz at intel dot com gcc-bugzilla@gcc.gnu.org
Wed Dec 5 10:55:00 GMT 2018


            Bug ID: 88365
           Summary: -Wsign-conversion ignores implicit conversion
           Product: gcc
           Version: 8.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: igor.chorazewicz at intel dot com
  Target Milestone: ---

Consider following code, compiled with -Wsign-conversion:

#include <iostream>

template <typename T>
struct wrapper {
    T t;

    operator T() 
        return t; 

    T get()
        return t;

int main() {
    int a[10];
    int* x { a } ;
    wrapper<long unsigned int> y{2};

    std::cout << (x + y); // warning

It produces "warning: conversion to 'long int' from 'long unsigned int' may
change the sign of the result". If y is of type "long unsigned int", there is
no warning. Moreover when I explicitly call y.get() there is also no warning:

std::cout << (x + y.get()); // ok

More information about the Gcc-bugs mailing list