Снова порядок определения шаблонов функций
От: Went  
Дата: 16.12.20 20:02
Оценка:
Здравствуйте. Есть код, упрощенно выглядит так (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 макросом не предлагать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.