При использовании gcc11 (11.3.1) я наблюдаю странное поведение: кажется, что -idirafter путь имеет приоритет над -iquote path, если путь одинаков для обоих вариантов.
Учитывайте:
Код: Выделить всё
// test/foo.hpp
#pragma once
auto foo{ char{ 256 } };
Как и следовало ожидать, если мы попытаемся скомпилировать из родительского каталога test/, мы получим
Код: Выделить всё
$ g++ -iquote. -c test/foo.cpp -o foo.o
In file included from test/foo.cpp:1:
./test/foo.hpp:5:21: error: narrowing conversion of '256' from 'int' to 'char' [-Wnarrowing]
5 | auto foo{ char{ 256 } };
|
Однако добавление -idirafter. заставляет все компилироваться:
Код: Выделить всё
$ g++ -iquote. -idirafter. -c test/foo.cpp -o foo.o
, gcc14 и gcc15 не демонстрируют такого поведения. Однако мне не удалось найти никаких упоминаний об ошибке в gcc11. Мне было интересно, видел ли кто-нибудь подобную проблему или есть отчет об ошибке, который я мог пропустить, и есть ли возможный патч? Очевидно, если бы кто-то мог подтвердить или опровергнуть эту проблему, было бы здорово.
Спасибо!
Подробнее здесь:
https://stackoverflow.com/questions/798 ... lude-paths