{% if compound.templates != None or func.templates != None %} {% if func.include %} {% endif %}
{% if compound.templates != None %} {% set j = joiner(', ') %} template <{% for t in compound.templates %}{{ j() }}{{ t.type }} {% if t.name %}{{ t.name }}{% else %}_{{ loop.index }}{% endif %}{% endfor %}> {% endif %} {% if compound.templates != None and func.templates != None %}
{% endif %} {% if func.templates != None %} {% set j = joiner(', ') %} template <{% for t in func.templates %}{{ j() }}{{ t.type }}{% if t.name %} {{ t.name }}{% endif %}{% if t.default %} = {{ t.default }}{% endif %}{% endfor %}> {% endif %}
{% endif %} {% set j = joiner(',\n ') %} {{ func.prefix }}{{ func.type }} {{ prefix }}{{ func.name }}({% for param in func.params %}{{ j() }}{{ param.type_name }}{% if param.default %} = {{ param.default }}{% endif %}{% endfor %}){{ func.suffix }}{% if func.is_explicit %} explicit {% endif %}{% if func.is_final %} final{% elif func.is_override %} override{% elif func.is_pure_virtual %} pure virtual{% elif func.is_virtual %} virtual{% endif %}{% if func.is_protected %} protected{% if func.is_slot %} slot{% endif %}{% elif func.is_private %} private{% if func.is_slot %} slot{% endif %}{% elif func.is_signal %} signal{% elif func.is_slot %} public slot{% endif %}{% if func.is_defaulted %} defaulted{% endif %}{% if func.is_deleted %} deleted{% endif %}{% if func.is_consteval %} consteval{% elif func.is_constexpr %} constexpr{% endif %}{% if func.is_conditional_noexcept %} noexcept(…){% elif func.is_noexcept %} noexcept{% endif %}{% if func.since %} {{ func.since }}{% endif %} {% if func.include and compound.templates == None and func.templates == None %} {% endif %}

{% if func.brief %}

{{ func.brief }}

{% endif %} {% if func.has_template_details or func.has_param_details or func.return_value or func.return_values or func.exceptions %} {% if func.has_template_details %} {# Unlike with function arguments, where it's desirable to document either all of them or none, template parameters are often implicit, not meant to be specified by the user. Thus, if they're not documented, assume they're implicit, and don't list them in the details. Same is with unnamed template arguments, those aren't shown either. #} {% for template in func.templates|selectattr('name')|selectattr('description') %} {{ template.name }} {% endfor %} {% endif %} {% if func.has_param_details %} {% for param in func.params|selectattr('name') %} {{ param.name }}{% if param.direction == 'in' %} in{% elif param.direction == 'out' %} out{% elif param.direction == 'inout' %} in/out{% endif %} {% endfor %} {% endif %} {% if func.return_value %} {{ '' if func.return_values or func.exceptions else '' }} Returns {{ '' if func.return_values or func.exceptions else '' }} {% elif func.return_values %} {% endif %} {% if func.return_values %} {% for value, description in func.return_values %} {{ value }} {% endfor %} {% endif %} {% if func.exceptions %} {% for exception, description in func.exceptions %} {{ exception }} {% endfor %} {% endif %}
Template parameters
{{ template.description }}
Parameters
{{ param.description }}
{{ func.return_value }}
Returns
{{ description }}
Exceptions
{{ description }}
{% endif %} {% if func.description %} {{ func.description }} {% endif %}