§14.10.3 N4553 的约束 [temp.constr.order]的部分排序指定由概念和逻辑运算符形成的约束表达式应部分排序并用于在重载的情况下选择最佳可行函数。但这是否也适用于使用逻辑运算符折叠表达式的约束表达式?
例如,gcc在此处给出一个模棱两可的重载错误是否正确,或者代码是否有效,打印“c”?
template <class T> concept bool A = std::is_move_constructible<T>::value;
template <class T> concept bool B = std::is_copy_constructible<T>::value;
template <class T> concept bool C = A<T> && B<T>;
template <class... _tx>
requires (A<_tx> && ...)
void g(_tx... tx) {
std::cout << "a\n";
}
template <class... _tx>
requires (C<_tx> && ...)
void g(_tx... tx) {
std::cout << "c\n";
}
f(3, 2.0)