У менять есть решение разделенное на 2 проекта.
Проект 1 (exe) содержит main.cpp и test.h.
Проект 2 (lib) содержит больше файлов, но проблему рассмотрим на 2 из них, stack.h, stack.ipp.
Проект 1 собирается после проекта 2 и имеет от него зависимость (дополнительные каталоги включаемых проектов и т.д. настроены)
main.cpp включает test.h
test.h включает stack.ipp
stack.ipp включает stack.h
Все работает
Но стоит в проекте 2 создать .cpp файл и включить в него любой stack файл - получаю ошибки
Например:
stack.h(6,22): error C2760: синтаксическая ошибка: непредвиденный элемент "||". Ожидается "выражение"
, что ссылается на этот код:
template<typename T>
concept dyn_memory_limit = !(
std::is_void_v<T> || //can`t return void
std::is_unbounded_array_v<T> //cant manage T[]
) &&
std::is_destructible_v<T> //will destruct all data in destructor
;
type_traits включены (в другой заголовок, что включается в stack.h) и оно слава богу (почему перестало - не ясно) перестало выдавать ошибку на std namespace, однако это не единственная ошибка - она затрагивает ВСЮ структуру шаблонную, что я объявил.
stack.h объявляет, stack.ipp определяет шаблонную структуру
(попытался разделить как в .h/.cpp делается)
При этом, если я сую объявление и определение в один файл (сразу в шаблоне определяю), то такой ошибки нет
Использую VS2022, С++ 20 и С17 в обоих проектах
В чем может быть причина того, что в проекте 2 любой cpp ломает все?