MSVC не видит макрос, причем у 2026 таких случаев сильно больше, но суть одна. Или даже похоже, что оно пытается до раскрытия макросов какие-то выводы делать.
Предыдущие студии нормально компилируют, GCC, вплоть до 15го, также нормально все компилирует.
Вот прямо перед использованием проверяю его существование — останавливается по ошибке "UMBA_RULE_OF_FIVE is defined before use". Отключаю проверку — получаю "Function definition for 'UMBA_RULE_OF_FIVE' not found."
Что за бред?
#if 0
#ifdef UMBA_RULE_OF_FIVE
#error"UMBA_RULE_OF_FIVE is defined before use"#else
#error"UMBA_RULE_OF_FIVE is NOT defined before use"#endif
#endif
struct ICommandLineOptionCollector
{
UMBA_RULE_OF_FIVE(ICommandLineOptionCollector, default, default, default, default, default);
//...
};
Здравствуйте, Marty, Вы писали:
M>Вот прямо перед использованием проверяю его существование — останавливается по ошибке "UMBA_RULE_OF_FIVE is defined before use". Отключаю проверку — получаю "Function definition for 'UMBA_RULE_OF_FIVE' not found."
Здравствуйте, Pzz, Вы писали: M>>Вот прямо перед использованием проверяю его существование — останавливается по ошибке "UMBA_RULE_OF_FIVE is defined before use". Отключаю проверку — получаю "Function definition for 'UMBA_RULE_OF_FIVE' not found." Pzz>А во что он определён?
Он разворачивается в ctor по умолчанию, ctor/op= копирования и перемещения
Pzz>Например, если определить его так: Pzz>
Ну вы-то вроде и в программировании, и на форумах в интернете, далеко уже не мальчик, неужели так трудно проиллюстрировать свою проблему минимальным воспроизводимым примером с ссылкой на godbolt (ну или на тестовые репозиторий на github/gitlab)?
Re: MSVC2022/2026 не видит макрос, вернее, пытается его как-то трактовать...
Здравствуйте, Marty, Вы писали:
M>Вот прямо перед использованием проверяю его существование — останавливается по ошибке "UMBA_RULE_OF_FIVE is defined before use". Отключаю проверку — получаю "Function definition for 'UMBA_RULE_OF_FIVE' not found." M>Что за бред?
Скорее всего разный (и условный) порядок подключения инклюдов в разных файлах компиляции.
И каждый день — без права на ошибку...
Re[2]: MSVC2022/2026 не видит макрос, вернее, пытается его к
Здравствуйте, B0FEE664, Вы писали:
M>>Вот прямо перед использованием проверяю его существование — останавливается по ошибке "UMBA_RULE_OF_FIVE is defined before use". Отключаю проверку — получаю "Function definition for 'UMBA_RULE_OF_FIVE' not found." M>>Что за бред?
BFE>Скорее всего разный (и условный) порядок подключения инклюдов в разных файлах компиляции.
Порядок разный, да. Но не условный. Хидер, в котором объявлен макрос, защищён только #pragma once. Он может где-то ещё включаться, но точно включается в том файле, где происходила ошибка
Более того, я проверял определение через #if defined() — срабатывало, и останавливалось там на #error. Если #error закоментировать — то опять ошибка.
Решил попытаться локализовать проблему, сделал тестик, там подключается только один мой файл, объявил структуру, в которой только мой макрос и всё — ошибка воспроизводится. Сделал второй тест — убрал инклюд, вставил непосредственно его содержимое — ошибка воспроизводится. Потом ещё приседал по разному — и вдруг ошибка перестала вопроизводится.
У меня проект на симейке. Закрыл студию, удалил все файлы, перегенерил заново, запустил, собираю и так и сяк — ошибка не воспроизводится. Всё работает и в 2022 и в 2026ой студиях.
Еще была куча предупреждений, типа pBuf используется до инициализации. Но как же до, когда тремя строчками выше pBuf явно присваивается.
И вообще куча предупреждений была. Кое-какие при этом были полезными. А сейчас всё собирается с нулём ошибок, предупреждений, и даже сообщений.
Что это было, я так и не понял, но всё заработало.
Да, только только поставил 2026ую студию, комп не перегружал. Но и перед тем, как всё заработало — тоже не перегружал. В общем, сижу в непонятках
Здравствуйте, Marty, Вы писали:
M>У меня проект на симейке. Закрыл студию, удалил все файлы, перегенерил заново, запустил, собираю и так и сяк — ошибка не воспроизводится. Всё работает и в 2022 и в 2026ой студиях.
Такое возможно, если на разных подключаемых путях лежат файлы с одинаковым именем, но разным содержимым.
Ещё может быть глюк при использовании precompiled header.
И каждый день — без права на ошибку...
Re[4]: MSVC2022/2026 не видит макрос, вернее, пытается его к
Здравствуйте, B0FEE664, Вы писали:
M>>У меня проект на симейке. Закрыл студию, удалил все файлы, перегенерил заново, запустил, собираю и так и сяк — ошибка не воспроизводится. Всё работает и в 2022 и в 2026ой студиях.
BFE>Такое возможно, если на разных подключаемых путях лежат файлы с одинаковым именем, но разным содержимым.
Такого нет
BFE>Ещё может быть глюк при использовании precompiled header.
Здравствуйте, Marty, Вы писали:
M>Порядок разный, да. Но не условный. Хидер, в котором объявлен макрос, защищён только #pragma once. Он может где-то ещё включаться, но точно включается в том файле, где происходила ошибка
Недавно столкнулся с проблемой, когда #pragma once не работала в расшаренной папке на виртуальной машине.
Re[4]: MSVC2022/2026 не видит макрос, вернее, пытается его к
Здравствуйте, Skorodum, Вы писали:
M>>Порядок разный, да. Но не условный. Хидер, в котором объявлен макрос, защищён только #pragma once. Он может где-то ещё включаться, но точно включается в том файле, где происходила ошибка S>Недавно столкнулся с проблемой, когда #pragma once не работала в расшаренной папке на виртуальной машине.
Ну, тут она таки работает, иначе были бы сообщения об уже объявленных макросах