@communistic_sistema
Биохимик, но в программировании немного шарю

Почему возникает ошибка error C4430 в шаблоне, если выходной тип определен?

Использую lib в с++ решениях. Там где она является одним из проектов нет ошибок, в другом решении (которое dll) возникает ошибка в
template<typename IN, typename OUT> constexpr inline
OUT iterable_hash(const IN* in, size_t in_size, auto iterable_hash_lamda) {
//some code
}

error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
Я не понимаю откуда здесь берется int (я же определил OUT по шаблону). И не понимаю почему в решении где она создана нет ошибки, а в решении где она используется как внешняя - ошибка.

Собираю в с++ 20, устаревший mscv, /permisive
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@sergio_nsk
В следующий раз показывай полную ошибку с указанием строки и позиции в строке, чтобы не гадать.

`OUT` и `IN` очень общие и любимые литералы в заголовках Windows SDK, вероятно определены как пустые макросы, поменяй имена, например на `T` и `U`, иначе получается
template<typename, typename> constexpr inline
iterable_hash(const* in, size_t in_size, auto iterable_hash_lamda) {
//some code
}

что принимается за очень старый сишный стиль - по умолчанию предполагается, что возвращается и используется `int`, если тип не указан явно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы