#include <iostream>
#include <type_traits>
namespace ns
{
template <typename T1, typename T2>
void foo(T1 v1, T2 v2);
}
//-------------------I MOVED THIS HERE-----------------------------------//
struct SFyp{};
namespace ns
{
template <typename T2>
void foo(SFyp fyp, T2 v2)
{std::cout << "desired overload";}
}
//------------------------------------------------------//
template <typename T1, typename T2>
void baz(T1 v1, T2 v2)
{ ns::foo(v1, v2); }
template <typename T1>
struct SZug
{
template <typename T2>
void zug(T2 v2)
{
T1 v1;
baz(v1, v2);
}
};
int main()
{
SZug<SFyp> z;
z.zug(1);
}