
{% from 'macros/helpers.jinja2' import cpo_type_aliases %}
{% from 'macros/dispatch.jinja2' import boolean_dispatch, string_dispatch, typed_operator_overloads %}

{%- if is_llm_mode %}
// LLM_TODO: Adjust expected signature if needed - currently: ({{ arg_pairs }})
// LLM_HINT: The operator() calls are inherited from cpo_base via CRTP - no manual implementation needed
{%- endif %}
inline constexpr struct {{ cpo_name }}_ftor final : tincup::cpo_base<{{ cpo_name }}_ftor> {
  TINCUP_CPO_TAG("{{ cpo_name }}")
  inline static constexpr bool is_variadic = {{ 'true' if has_variadic else 'false' }};
{%- if dispatch_info and dispatch_info.type == 'bool' %}
  {{ boolean_dispatch(cpo_name, dispatch_info, arg_types, arg_pairs, arg_names, concept_types, arg_pairs_no_dispatch, arg_names_no_dispatch, concept_types_no_dispatch) }}
{%- elif dispatch_info and dispatch_info.type == 'string' %}
  {{ string_dispatch(cpo_name, dispatch_info, arg_types, arg_pairs, arg_names, concept_types, arg_pairs_no_dispatch, arg_names_no_dispatch, concept_types_no_dispatch) }}
{%- else %}

  {{ typed_operator_overloads(cpo_name, arg_types, arg_pairs, arg_names, concept_types, canonical_concept_args) }}
{%- endif %}

} {{ cpo_name }};

// Note: operator() methods are provided by cpo_base

{{ cpo_type_aliases(cpo_name, arg_types, concept_types, semantic_info, canonical_concept_args) }}
