Возьмем следующий пример (https://godbolt.org/z/ouX3Vz):
template<typename T>
using A = T;
template<typename T, typename V>
using A = V; // Why is this not allowed?
template<typename T>
void B() {}
template<typename T, typename V>
void B() {} // Yet this is allowed?
int main() {
A<int> hello = 10; // Allowed, T=int
A<double> world = 20.0; // Allowed, T=double
// A<int, int> bad = 20; // Not allowed, T=int, V=double?
B<int>();
B<int, int>();
}
Нам разрешено иметь два функциональных шаблона для B
, поскольку параметры различаются, однако мы не являемся разрешено иметь два шаблона псевдонимов для A
, несмотря на различные параметры.
Это упущение в стандарте или есть логическое обоснование, которое я пропускаю? Есть ли ссылки на стандарт, описывающий это поведение?