overloaded_function, fusedを実装した。

実験的なライブラリなので、後々仕様変更などをするかもしれませんが、とりあえずshiro::tupleに対して使えるfusedまで実装しました。現状overloaded_functionが扱えるのは関数オブジェクトだけですが、のちのちboost::overloaded_functionのように関数オブジェクト以外にも対応出来るようにしたいなぁと考えていたりします。あとついでに適当にmake_overloadとmake_fusedも入ってます。

overloaded_function
https://github.com/fimbul/shiro/blob/master/shiro/functional/overloaded_function.hpp
fused
https://github.com/fimbul/shiro/blob/master/shiro/tuple/fused.hpp

これで以下のように書くことが出来るようになりました。

#include <shiro/tuple.hpp>
#include <shiro/functional.hpp>

int main() {
  constexpr shiro::fused<
    shiro::overloaded_function<std::plus<int>, std::minus<double>>
  > f{};

  static_assert(f(1, 2) == 3, "");
  static_assert(f(3.5, 1.5) == 2.0, "");
  static_assert(f(shiro::make_tuple(1, 2)) == 3, "");
  static_assert(f(shiro::make_tuple(3.5, 1.5)) == 2.0, "");
}