diff --git a/tests/unit/tt.cc b/tests/unit/tt.cc index b91d6582fd..fe03a60fab 100644 --- a/tests/unit/tt.cc +++ b/tests/unit/tt.cc @@ -303,6 +303,32 @@ TEST_CASE("TemplateTask", "[core]") { static_assert(std::is_const_v>, "Const datum expected"); }, ttg::edges(in), ttg::edges())); + { + auto tt = ttg::make_tt( + [](const int &key, const auto &datum, auto &outs) { + static_assert(std::is_lvalue_reference_v, "Lvalue datum expected"); + static_assert(std::is_const_v>, "Const datum expected"); + }, + ttg::edges(in), ttg::edges()); + using tt_t = typename std::remove_reference_t; + static_assert(std::is_const_v>); + } + CHECK_NOTHROW(ttg::make_tt( + [](const int &key, auto &&datum, auto &outs) { + static_assert(std::is_rvalue_reference_v, "Rvalue datum expected"); + static_assert(!std::is_const_v>, "Nonconst datum expected"); + }, + ttg::edges(in), ttg::edges())); + { + auto tt = ttg::make_tt( + [](const int &key, auto &&datum, auto &outs) { + static_assert(std::is_rvalue_reference_v, "Rvalue datum expected"); + static_assert(!std::is_const_v>, "Nonconst datum expected"); + }, + ttg::edges(in), ttg::edges()); + using tt_t = typename std::remove_reference_t; + static_assert(!std::is_const_v>); + } // and without an output terminal CHECK_NOTHROW(ttg::make_tt( @@ -312,6 +338,18 @@ TEST_CASE("TemplateTask", "[core]") { ttg::send(0, std::decay_t{}, std::decay_t{}); }, ttg::edges(in), ttg::edges())); + { + auto tt = ttg::make_tt( + [](const int &key, auto &datum) { + static_assert(std::is_lvalue_reference_v, "Lvalue datum expected"); + static_assert(std::is_const_v>, "Const datum expected"); + ttg::send(0, std::decay_t{}, std::decay_t{}); + }, + ttg::edges(in), ttg::edges()); + using tt_t = typename std::remove_reference_t; + static_assert(std::is_const_v>); + } + } } diff --git a/ttg/ttg/madness/ttg.h b/ttg/ttg/madness/ttg.h index d90bda0a49..315befbc5e 100644 --- a/ttg/ttg/madness/ttg.h +++ b/ttg/ttg/madness/ttg.h @@ -228,6 +228,8 @@ namespace ttg_madness { using input_refs_full_tuple_type = ttg::meta::add_glvalue_reference_tuple_t>; + using input_args_type = actual_input_tuple_type; + using input_values_tuple_type = ttg::meta::drop_void_t>; using input_refs_tuple_type = ttg::meta::drop_void_t>; static_assert(!ttg::meta::is_any_void_v); diff --git a/ttg/ttg/util/meta/callable.h b/ttg/ttg/util/meta/callable.h index f63f4c63ca..94fc3c91f6 100644 --- a/ttg/ttg/util/meta/callable.h +++ b/ttg/ttg/util/meta/callable.h @@ -150,7 +150,7 @@ namespace ttg::meta { template struct candidate_argument_bindings && !std::is_void_v>> { using type = std::conditional_t, typelist, - typelist>; };