По поводу -Woverloaded-virtual. По совету этой статьи решил попробовать поиспользовать этот флаг. И внезапно столкнулся с проблемой в большом проекте, использующего boost.
Возьмем вот такой код. Как мы видим, он компилируется без варнов. А теперь создадим идентичный код (прототипы методов срисованы с бустовых один-в-один). И внезапно, компилятор начинает говорить о shadow параметра. Что это? Баг компилятора GCC? Потому что Clang, например, не дает варна в таком случае.
Не проводил широких экспериментов с оптимизацией. Пример с inline функцией был выбран для упрощения. Если вместо нее в foo и boo создавать объект типа std::string, то тоже будет наблюдаться включение "ненужного" модуля. Линкер в первом модуле *BNDDIR увидит инстанцированный конструктор std::basic_string и включит этот модуль в программу, хотя это инстанцирование уже есть в модуле BOO$.
Не понял Вашего вопроса "откуда в принципе IBM i". Из США, оттуда же, где фирма IBM )))
Почему у нас именно эта система сказать не могу. Она у нас с 90-х годов. На этой системе у нас работает ядро банка, мы разрабатываем и поддерживаем банковский софт, его back end.
По поводу -Woverloaded-virtual. По совету этой статьи решил попробовать поиспользовать этот флаг. И внезапно столкнулся с проблемой в большом проекте, использующего boost.
Возьмем вот такой код. Как мы видим, он компилируется без варнов. А теперь создадим идентичный код (прототипы методов срисованы с бустовых один-в-один). И внезапно, компилятор начинает говорить о shadow параметра. Что это? Баг компилятора GCC? Потому что Clang, например, не дает варна в таком случае.
В функции HashFunctionHorner ошибка. В условии окончания цикла надо
i != s.size()
, а неs[i] != s.size()
.В моем примере модули скомпилированы отдельно друг от друга, а не в одной команде. Поэтому функция zoo есть в каждом, это нормально.
Вот да, поддерживаю вопрос.
Не проводил широких экспериментов с оптимизацией. Пример с inline функцией был выбран для упрощения. Если вместо нее в foo и boo создавать объект типа std::string, то тоже будет наблюдаться включение "ненужного" модуля. Линкер в первом модуле *BNDDIR увидит инстанцированный конструктор std::basic_string и включит этот модуль в программу, хотя это инстанцирование уже есть в модуле BOO$.
Им и при хороших временах было пофигу. А сейчас и подавно.
Мне интересно мнение читателя по поводу вопроса.
Если верить википедии, то вот так:
Не понял Вашего вопроса "откуда в принципе IBM i". Из США, оттуда же, где фирма IBM )))
Почему у нас именно эта система сказать не могу. Она у нас с 90-х годов. На этой системе у нас работает ядро банка, мы разрабатываем и поддерживаем банковский софт, его back end.