blob: b85d4c96dab6f94069eda4969f50857fb46cd86f [file] [log] [blame]
// PR c++/102670
// { dg-do compile { target c++20 } }
namespace ns {
struct S { };
template<int I>
constexpr int adl(const S &) {
return I;
}
}
namespace redirect {
template<class T, int I>
concept can_call_adl = requires(T t) {
adl<I>(t);
};
template<int I>
struct adl_fn {
template<can_call_adl<I> T>
constexpr decltype(auto) operator()(T t) const {
return adl<I>(t);
}
};
namespace {
template<int I>
constexpr inline adl_fn<I> adl{};
}
}
int main() {
static_assert(redirect::can_call_adl<ns::S, 3>);
redirect::adl<3>(ns::S{});
}