Re: Снова порядок определения шаблонов функций
От: rg45 СССР  
Дата: 16.12.20 21:17
Оценка: 4 (1)
Здравствуйте, Went, Вы писали:

W>Проблема очевидна: шаблон функции g() не видит вторую перегрузку функции f() и при попытке вызвать g() даже там, где эта перегрузка уже определена, мы получаем ошибку.

W>Компилятор MSVS видит, а Apple LLVM — нет. Вроде как, второе поведение правильное. Как мне переписать структуру кода так, чтобы, не меняя порядок функций (это невозможно, так как две первые функции находятся в проекте более низкого уровня), это заработало? Я не знаток деталей стандарта, но, наверное, какая-то лазейка есть? Определить функцию f макросом не предлагать


Все правильно. f — это non-dependent name внутри g. Поэтому все возможные ОБЪЯВЛЕНИЯ f должны быть видны в точке вызова: "return f(t)". А те, которые не видны, просто не попадут в список кандидатов на подстановку.

Смотри: 13.8.4 Non-dependent names.


Правильные ответы:
http://rsdn.org/forum/cpp/7907067.1
Автор: watchmaker
Дата: 17.12.20

http://rsdn.org/forum/cpp/7907111.1
Автор: watchmaker
Дата: 17.12.20
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 17.12.2020 8:44 rg45 . Предыдущая версия . Еще …
Отредактировано 16.12.2020 21:54 rg45 . Предыдущая версия .
Отредактировано 16.12.2020 21:53 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.