{ \
auto func = make_ref<TOpBinary<A0, A1, R>>(); \
\
func->function = [](A0 a, A1 b) -> R __VA_ARGS__; \
func->name = #fname; \
\
std::stringstream source_builder; \
source_builder << "(" \
<< func->get_type_arg_0()->get_cpp() \
<< " a, " \
<< func->get_type_arg_1()->get_cpp() \
<< " b)" #__VA_ARGS__; \
\
func->source = source_builder.str(); \
\
std::stringstream key_builder; \
key_builder << #key_prefix << "_" \
<< func->get_type_arg_0()->get_code() \
<< func->get_type_arg_1()->get_code() \
<< func->get_type_res()->get_code(); \
func->key = key_builder.str(); \
\
fname = func.as<OpBinary>(); \
}