Учитывая следующее:
код-ссылка
Вот сам код для удобства (и я не уверен, что моя ссылка работает):
#include <iostream>
#include <vector>
#include <stdint.h>
using namespace std;
int main()
{
cout<<"Hello World";
std::vector<std::string> test_vect {"1", "2"};
long unsigned int size = static_cast<long unsigned int>(test_vect.size());
std::cout << "size: " << size << std::endl;
return 0;
}
И следующие параметры компиляции: g++ file.c -Wall -Wextra "-Werror" "-Wuseless-cast"
Здесь вы можете видеть, что я кастую vector.size()
на long unsigned int
, это помечено как бесполезное приведение на Wandbox (моя ссылка) однако тот же код, выполняемый на моем Linux-компьютере, не выдает предупреждение, но он выдаст мне другое предупреждение, если я не произнесу его.
Я понимаю, что два unsigned long
против size_t
могут быть разные.Но то, что я пытаюсь сделать, это написать некоторый код, который не имеет предупреждений со всеми установленными предупреждениями о приведении (возможно, это является оптамизитным при кросс-компиляции).
Итак, один компилятор жалуется, что я преобразовываю типы, поэтому яприведение, но затем другой компилятор жалуется на бесполезное приведение - поэтому я удаляю приведение - и все вокруг: (
Есть ли хороший подход к этому, чтобы я не получал предупреждения ни на одном из компиляторов?
Я собирался просто удалить опцию -Wuseless-cast
, но я думал, что увижу, есть ли у кого-нибудь другие идеи ...