Здравствуйте, 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