Первая часть связана с поиском имени члена, поэтому она не работает.
Я бы сослался на: 10.2/2 Member name lookup
Следующие шаги определяют результат поиска имени в области видимости класса C. Сначала каждое объявление для имени в классеи в каждом из его базовых классов подобъектов рассматривается.Имя элемента f в одном подобъекте B скрывает имя элемента f в подобъекте A, если A является подобъектом базового класса объекта B. Любые объявления, которые являются такими скрытыми, исключаются из рассмотрения.Каждое из этих объявлений, которое было введено с помощью объявления об использовании, считается от каждого подобъекта C, который имеет тип, содержащий объявление, обозначенное с помощью объявления об использовании.
Если результирующийнабор объявлений не все из подобъектов одного и того же типа, или набор имеет нестатический элемент и включает в себя элементы из различных подобъектов, имеется неоднозначность и программа некорректна .В противном случае этот набор является результатом поиска.
Теперь, для вопроса с шаблонными функциями.
Согласно 13.3.1/7 Candidate functions and argument list
В каждомВ случае, когда кандидат является шаблоном функции, специализации кандидата на шаблон функции генерируются с использованием вывода аргумента шаблона (14.8.3, 14.8.2).Затем эти кандидаты обрабатываются как функции-кандидаты обычным способом.Заданное имя может ссылаться на один или несколько шаблонов функций, а также на набор перегруженных не шаблонных функций.В таком случае функции-кандидаты, сгенерированные из каждого шаблона функции, объединяются с набором не шаблонных функций-кандидатов.
И если вы продолжите читать, 13.3.3/1 Best viable function
F1 будетсчитается функцией лучше , если:
F1 - не шаблонная функция, а F2 - специализация шаблона функции
. ПоэтомуСледующий фрагмент кода компилируется и запускает функцию без шаблона:
D c;
c.f(1);