優先順位付オーバーロード関数オブジェクト

事の起こり
apply(a,b)(  //a,bは多態型
  [](int,int){}
  ,[](auto,int){}
  ,[](auto,auto){}
)

みたいなことをやりたかった

優先順位付オーバーロード関数オブジェクト

関数が上からチェックされるオーバーロード関数オブジェクト
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

ordered overload function oject · GitHub

    auto f=alol::make_poly(
        [](int,auto){std::cout<<"(int,auto)";}
        ,[](auto,int){std::cout<<"(auto,int)";}
        ,[](auto,auto){std::cout<<"(auto,auto)";}
    );
    f(42,42);


上から評価されるので(int,auto)と(auto,int)でかち合わない

問題は

    auto g=alol::make_poly(
        [](double){std::cout<<"double";}
        ,[](int){std::cout<<"int";}
    );
    g(42);

のようなときにintがdoubleに暗黙型変換されてしまうことである
そういう場合はoverloadルールで解決されるmake_overloadを使おう
make_overloadを書いた - ここは匣