При использовании using std::to_string;
внутри тела функции имена to_string
в пространстве имен Logger
не будут найдены name lookup ;которая остановится, когда будет найдено имя в области действия функции, и дальнейшая область не будет исследована.
Обратите внимание, что для IStringable
to_string(IStringable const& v)
можно найти ADL , который не работает для встроенных типов, таких как const char*
.
1) Для аргументов фундаментального типа связанный набор пространств имен и классов является пустым
Вы можете переместить using std::to_string;
из тела функции.например,
using std::to_string;
template<class T>
void log(T const& v)
{
std::cout << "debug: " << to_string(v) << '\n';
}
LIVE