Неоднозначный вызов перегруженной функции - std:: to_string - программирование

Неоднозначный вызов перегруженной функции - std:: to_string

При попытке вставить целочисленные значения в строку, я подумал, что на мои молитвы ответил, когда я нашел std:: to_string, но по какой-то причине, когда я действительно пытаюсь ее использовать, Visual Studio жалуется на двусмысленность. Вот текущая инкарнация моей функции:

string get_time_remaining (int elapsed)
{
    string remaining;
    string temp_string;

    int time_remaining = TimeLimit - elapsed;

    int temp_int;

    temp_int = int(time_remaining / 3600);

    if(temp_int == 0)
        remaining = "00 : ";
    else
    {
        temp_string = std::to_string(temp_int);   // Here!
        remaining = temp_string + " : ";
    }

    temp_int = time_remaining % 60 + 1;

    if(temp_int < 10)
        remaining = remaining + "0";

    temp_string = std::to_string(temp_int);

    remaining = remaining + temp_string;

    return remaining;
}

Я попробовал кастинг temp_int внутри вызова to_string, и, как вы можете видеть, я даже попытался сделать результат того, что должно быть целочисленным делением, но независимо от того, что я делаю, VS выплевывает это на меня:

d:\my programs\powerplay\powerplay\powerplay.cpp(1285): error C2668: 'std::to_string' : ambiguous call to overloaded function
1>          d:\microsoft visual studio 10.0\vc\include\string(688): could be 'std::string std::to_string(long double)'
1>          d:\microsoft visual studio 10.0\vc\include\string(680): or       'std::string std::to_string(_ULonglong)'
1>          d:\microsoft visual studio 10.0\vc\include\string(672): or       'std::string std::to_string(_Longlong)'

Любая помощь будет оценена.

4b9b3361

Ответ 1

MSVC11 не имеет надлежащих перегрузок для std::to_string, поэтому вам нужно сделать от static_cast до unsigned long long или long long

Обратите внимание, что эта ошибка исправлена ​​в ноябрьском CTP 2012. Что вы можете получить здесь.

Ответ 2

temp_int - это значение int, и Visual Studio, по-видимому, обнаруживает только перегрузки, которые получают значения double, long long или unsigned long long, поэтому он не знает, какую перегрузку использовать, неоднозначность (хотя казалось бы, интуитивно было бы отличать целое число от длинных значений)

Объявить temp_int как long long или применить его при вызове функции