Full name of submitter: Brian Bi
Issue description: There is implementation divergence in the treatment of the following deduction:
#include <cstddef>
template <std::size_t N>
void f(const int* const (&)[N]);
int main() {
int* a[3];
f(a);
}
It is not clear whether bullet 4.1 of [temp.deduct.call] allows qualification conversions.
Suggested resolution: Edit [temp.deduct.call]/4.1 as follows:
If the original P is a reference type, the deduced A (i.e., the type referred to by the reference) can be more cv-qualified a type other than the transformed A that is reference-compatible ([dcl.init.ref]) with the transformed A.
(We might not need to say "transformed", actually. As far as I can tell, when the original P is a reference type, we transform A only in the case where P is a forwarding reference, and in that case no difference in cv-qualification is possible.)
Full name of submitter: Brian Bi
Issue description: There is implementation divergence in the treatment of the following deduction:
It is not clear whether bullet 4.1 of [temp.deduct.call] allows qualification conversions.
Suggested resolution: Edit [temp.deduct.call]/4.1 as follows:
(We might not need to say "transformed", actually. As far as I can tell, when the original
Pis a reference type, we transformAonly in the case wherePis a forwarding reference, and in that case no difference in cv-qualification is possible.)