//difficulty level: very hard
#include <iostream>
#include <concepts>
template <typename T>
struct Nec {
Nec(T)
{
std::cout << std::same_as<T, int>;
}
};
struct A {
A() = default;
A(int) {std::cout << 'i'; }
operator int()const
{
std::cout << 'c';
return 1;
}
};
Nec(int) -> Nec<A>;
Nec(A) -> Nec<int>;
int main()
{
A ax;
Nec n1(3);
Nec n2(ax);
}