[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


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88365

            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