Здравствуйте. Есть код, упрощенно выглядит так (
IDEONE):
#include <iostream>
template<typename T>
int f(T t)
{
return 1;
}
template<typename T>
int g(T t)
{
return f(t);
}
int f(float x)
{
return 2;
}
int main()
{
std::cout << g(1.0f);
return 0;
}
Проблема очевидна: шаблон функции
g() не видит вторую перегрузку функции
f() и при попытке вызвать
g() даже там, где эта перегрузка уже определена, мы получаем ошибку.
Компилятор MSVS видит, а Apple LLVM — нет. Вроде как, второе поведение правильное. Как мне переписать структуру кода так, чтобы, не меняя порядок функций (это невозможно, так как две первые функции находятся в проекте более низкого уровня), это заработало? Я не знаток деталей стандарта, но, наверное, какая-то лазейка есть? Определить функцию f макросом не предлагать