temp_int is a int value, and Visual Studio seems to detect only overloads which receive either double, long long or unsigned long long values, so it doesn't know which overload to use, thus the ambiguity (although it would seem intuitive to cast integer to long values)
Either declare temp_int as a long long, or cast it when invoking the function