コンテンツにスキップ

yu::tuples::applicable

この項目は仕様が確定していますが,現在はまだ実装されていません.

namespace yu::tuples {
    template <typename F, typename T>
    concept applicable = requires(F&& f, T&& t){
        tuples::apply(std::forward<F>(f), std::forward<T>(t));
    };
}

概要

applicableは,任意の関数呼び出し可能な型Fに対して,型Tの要素をTupleとして展開して呼び出し可能であることを表すコンセプトである.

std::invocableapply版である.

#include <tuple>
#include <iostream>
#include <yu/tuples/applicable.hpp>

int add(int a, int b) { return a + b; }

int main() {
    std::cout << std::boolalpha;

    std::cout << yu::tuples::applicable<decltype(&add), std::tuple<int, int>> << std::endl;
    std::cout << yu::tuples::applicable<decltype(&add), std::tuple<int>> << std::endl;

    std::cout << yu::tuples::applicable<decltype(&add), int [2]> << std::endl;
    std::cout << yu::tuples::applicable<decltype(&add), int [1]> << std::endl;

    std::cout << yu::tuples::applicable<decltype(&add), int> << std::endl;
}

出力

true
false
true
false
false