Меня смущают некоторые правила в стандарте. Я приведу их здесь:
Пусть X будет поисковым набором, созданным безусловный поиск , и пусть Y будет набором поиска, созданным зависимым от аргумента поиском (определенным следующим образом).
Таким образом, приведенное выше предложение означает, что набор X создан с помощью безусловного поиска . Затем мы рассмотрим правила безусловного поиска :
Во всех в случаях, перечисленных в [basi c .lookup.unqual], в областях поиска выполняется поиск декларации в порядке, указанном в каждой из соответствующих категорий; поиск имени заканчивается, как только найдено объявление для имени .
Подчеркнутая часть «поиск имени заканчивается, как только найдено объявление для имени», означает, что однажды имя найдено, поиск останавливается.
Итак, мой вопрос:
void func(int){}
void func(double){}
int main(){
func(0);
}
Рассмотрим приведенный выше код. Имя fun
используется безоговорочно. Таким образом, безоговорочные правила поиска выполняются. Следовательно, как только func(double)
или func(int)
найден, поиск останавливается. Итак, почему func
может быть перегружен, то есть набор функций-кандидатов содержит и func(int)
, и func(double)
? Разве это не противоречит безусловным правилам поиска? Если я что-то упустил, поправьте меня.