Согласно некоторым цитатам из стандарта:
[over.match .функции]/4
[...] Для функций без преобразования, введенных объявлением использования в производный класс, функция считается членом производного класса с целью определения типа неявного параметра объекта.
И рассмотрим следующий код:
#include <iostream>
struct Base {
void show(double) {
std::cout << "0" << std::endl;
}
};
struct Test :Base {
using Base::show; //#1
void show(double) { //#2
std::cout << "1" << std::endl;
}
};
int main() {
Test t;
t.show(1.2);
}
В соответствии со стандартом, который я привел, это означает, что неявный объектный параметр типа Test
принимается как параметр #1
.
Для #1
объявление будет show(Test&,double)
.
Для #2
объявление будет show(Test&,double)
.
поэтому в целях разрешения перегрузки каждая неявная последовательность преобразования #1
неотличима от последовательности #2
, вызов t.show(1.2)
будет неоднозначным, однако #2
вызывается, почему? если я что-то упустил в стандарте, поправьте меня.