приведение без знака к сложному <int>вызывает предупреждение о преобразовании знака - PullRequest
0 голосов
/ 24 января 2020

Рассмотрим следующий код:

#include <complex>

int main()
{
    unsigned u = 1u;
    auto result = static_cast<std::complex<int>>(u);
    return 0;
}

Компиляция с

g++ -std=c++11 -Werror -Wsign-conversion -o a.out source_file.cpp

Вызывает ошибку компиляции

source_file.cpp: In function ‘int main()’:
source_file.cpp:8:51: error: conversion to ‘int’ from ‘unsigned int’ may change the sign of the result [-Werror=sign-conversion]
     auto result = static_cast<std::complex<int>>(u);
                                                   ^

clang сообщает об аналогичной ошибке

source_file.cpp:6:50: error: implicit conversion changes signedness: 'unsigned int' to 'const value_type' (aka 'const int') [-Werror,-Wsign-conversion]
    auto result = static_cast<std::complex<int>>(u);
                  ~~~~~~~~~~~                    ^

Ошибка не имеет большого смысла на первый взгляд, что мне не хватает?

1 Ответ

1 голос
/ 24 января 2020

Вы получаете предупреждение о преобразовании не от приведения, а изнутри конструкции std::complex.

Чтобы «исправить» ваш пример, вы должны вместо этого сделать:

auto result = std::complex<int>{static_cast<int>(u)};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...