Введение в поиск имен в C++
Неквалифицированный вызов начинает поиск с текущей области и затем учитывает пространства имен, связанные с типами аргументов.
Функцию можно объявить в том же пространстве,
где лежит класс или структура аргумента.
Из main имя вызывают без квалификатора
Garden:: - компилятор подберет
подходящую перегрузку по типу значения.
Запишем пространство Garden со структурой
Tree и функцией полива, затем вызовем
ее из main:
#include <iostream>
namespace Garden {
struct Tree {};
void water(Tree) {
std::cout << "watered\n";
}
}
int main() {
Garden::Tree tree{};
water(tree);
return 0;
}
Строка в выводе подтверждает, что собран
вызов из пространства Garden, хотя
в main это имя не объявляли.