#include <iostream>
#include <type_traits>
#include <vector>
struct SFyp; //I ADDED THIS
namespace ns
{
template <typename T1, typename T2>
void foo(T1 v1, T2 v2);
template <typename T2> //I ADDED THIS
void foo(SFyp fyp, T2 v2);
}
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);
}
};
// SFyp overload of foo().
struct SFyp{};
namespace ns
{
template <typename T2>
void foo(SFyp fyp, T2 v2)
{std::cout <<"desired overload called";} //I ADDED THIS
}
// Test.
int main()
{
SZug<SFyp> z;
z.zug(1);
}