.. class:: m-table m-fullwidth
-=========================== ===================================================
-Property Description
-=========================== ===================================================
-:py:`var.base_url` Base URL of file containing detailed description
- [3]_
-:py:`var.id` Identifier hash [3]_
-:py:`var.type` Variable type [6]_
-:py:`var.name` Variable name [4]_
-:py:`var.brief` Brief description. Can be empty. [1]_
-:py:`var.description` Detailed description. Can be empty. [2]_
-:py:`var.has_details` If there is enough content for the full description
- block [5]_
-:py:`var.is_deprecated` Whether the variable is deprecated. [7]_
-:py:`var.is_static` If the variable is :cpp:`static`. Set only for
- member variables.
-:py:`var.is_protected` If the variable is :cpp:`protected`. Set only for
- member variables.
-:py:`var.is_constexpr` If the variable is :cpp:`constexpr`
-=========================== ===================================================
+=============================== ===============================================
+Property Description
+=============================== ===============================================
+:py:`var.base_url` Base URL of file containing detailed
+ description [3]_
+:py:`var.id` Identifier hash [3]_
+:py:`var.type` Variable type [6]_
+:py:`var.name` Variable name [4]_
+:py:`var.templates` Template specification for C++14 variable
+ templates. See `Template properties`_ for
+ details.
+:py:`var.has_template_details` If template parameters have description
+:py:`var.brief` Brief description. Can be empty. [1]_
+:py:`var.description` Detailed description. Can be empty. [2]_
+:py:`var.has_details` If there is enough content for the full
+ description block [5]_
+:py:`var.is_deprecated` Whether the variable is deprecated. [7]_
+:py:`var.is_static` If the variable is :cpp:`static`. Set only for
+ member variables.
+:py:`var.is_protected` If the variable is :cpp:`protected`. Set only
+ for member variables.
+:py:`var.is_constexpr` If the variable is :cpp:`constexpr`
+=============================== ===============================================
`Define properties`_
````````````````````
def parse_var_desc(state: State, element: ET.Element) -> str:
parsed = parse_desc_internal(state, element.find('detaileddescription'))
parsed.parsed += parse_desc(state, element.find('inbodydescription'))
- if parsed.templates or parsed.params or parsed.return_value or parsed.return_values or parsed.exceptions:
- logging.warning("{}: unexpected @tparam / @param / @return / @retval / @exception found in variable description, ignoring".format(state.current))
+ if parsed.params or parsed.return_value or parsed.return_values or parsed.exceptions:
+ logging.warning("{}: unexpected @param / @return / @retval / @exception found in variable description, ignoring".format(state.current))
assert not parsed.section # might be problematic
- return (parsed.parsed, parsed.search_keywords, parsed.is_deprecated)
+ return (parsed.parsed, parsed.templates, parsed.search_keywords, parsed.is_deprecated)
def parse_toplevel_desc(state: State, element: ET.Element):
state.parsing_toplevel_desc = True
var.is_private = element.attrib['prot'] == 'private'
var.name = element.find('name').text
var.brief = parse_desc(state, element.find('briefdescription'))
- var.description, search_keywords, var.is_deprecated = parse_var_desc(state, element)
+ var.description, templates, search_keywords, var.is_deprecated = parse_var_desc(state, element)
+ var.has_template_details, var.templates = parse_template_params(state, element.find('templateparamlist'), templates)
- var.has_details = var.base_url == state.current_compound_url and var.description
+ var.has_details = var.base_url == state.current_compound_url and (var.description or var.has_template_details)
if var.brief or var.has_details:
# Avoid duplicates in search
if var.base_url == state.current_compound_url and not state.doxyfile['M_SEARCH_DISABLED']:
<section class="m-dox-details" id="{{ var.id }}"><div>
<h3>
- {% if compound.templates != None %}
+ {% if compound.templates != None or var.templates != None %}
<div class="m-dox-template">
+ {% 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 var.templates != None %}
+ {% set j = joiner(', ') %}
+ template<{% for t in var.templates %}{{ j() }}{{ t.type }}{% if t.name %} {{ t.name }}{% endif %}{% if t.default %} = {{ t.default }}{% endif %}{% endfor %}>
+ {% endif %}
</div>
{% endif %}
{%+ if var.is_static %}static {% endif %}{{ var.type }} {{ prefix }}<a href="#{{ var.id }}" class="m-dox-self">{{ var.name }}</a>{% if var.is_protected %} <span class="m-label m-warning">protected</span>{% endif %}{% if var.is_constexpr %} <span class="m-label m-primary">constexpr</span>{% endif %}
{% if var.brief %}
<p>{{ var.brief }}</p>
{% endif %}
+ {% if var.has_template_details %}
+ <table class="m-table m-fullwidth m-flat">
+ <thead>
+ <tr><th colspan="2">Template parameters</th></tr>
+ </thead>
+ <tbody>
+ {% for template in var.templates|selectattr('name') %}
+ <tr>
+ <td{% if loop.index == 1 %} style="width: 1%"{% endif %}>{{ template.name }}</td>
+ <td>{{ template.description }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ {% endif %}
+ {% if var.description %}
{{ var.description }}
+ {% endif %}
</div></section>
- <dt>{% if var.is_static %}static {% endif %}{{ var.type }} <a href="{% if var.base_url != compound.url %}{{ var.base_url }}{% endif %}#{{ var.id }}" {% if var.has_details or var.base_url != compound.url %}class="m-dox"{% else %}class="m-dox-self" name="{{ var.id }}"{% endif %}>{{ var.name }}</a>{% if var.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}{% if mark_nonpublic and var.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}{% if var.is_constexpr %} <span class="m-label m-flat m-primary">constexpr</span>{% endif %}</dt>
+ <dt>
+ {% if var.templates != None %}
+ {% set j = joiner(', ') %}
+ <div class="m-dox-template">template<{% for t in var.templates %}{{ j() }}{{ t.type }}{% if t.name %} {{ t.name }}{% endif %}{% if t.default %} = {{ t.default }}{% endif%}{% endfor %}></div>
+ {% endif %}
+ {%+ if var.is_static %}static {% endif %}{{ var.type }} <a href="{% if var.base_url != compound.url %}{{ var.base_url }}{% endif %}#{{ var.id }}" {% if var.has_details or var.base_url != compound.url %}class="m-dox"{% else %}class="m-dox-self" name="{{ var.id }}"{% endif %}>{{ var.name }}</a>{% if var.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}{% if mark_nonpublic and var.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}{% if var.is_constexpr %} <span class="m-label m-flat m-primary">constexpr</span>{% endif %}
+ {# This empty line needs to be there otherwise it's eaten #}
+
+ </dt>
<dd>{{ var.brief }}</dd>
<section id="var-members">
<h2><a href="#var-members">Variables</a></h2>
<dl class="m-dox">
- <dt>int <a href="#ae934297fc39624409333eefbfeabf5e5" class="m-dox">DeprecatedVariable</a> <span class="m-label m-danger">deprecated</span> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ int <a href="#ae934297fc39624409333eefbfeabf5e5" class="m-dox">DeprecatedVariable</a> <span class="m-label m-danger">deprecated</span> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>A variable.</dd>
</dl>
</section>
<section id="var-members">
<h2><a href="#var-members">Variables</a></h2>
<dl class="m-dox">
- <dt>const int <a href="#a4f9fd9cff960aeecffcab6a5d2ffcd81" class="m-dox">a</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ const int <a href="#a4f9fd9cff960aeecffcab6a5d2ffcd81" class="m-dox">a</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>A value.</dd>
</dl>
</section>
<section id="pro-attribs">
<h2><a href="#pro-attribs">Protected variables</a></h2>
<dl class="m-dox">
- <dt>int <a href="#aaf7ee941db121bdf57653fe4bd8f3f53" class="m-dox">a</a></dt>
+ <dt>
+ int <a href="#aaf7ee941db121bdf57653fe4bd8f3f53" class="m-dox">a</a>
+ </dt>
<dd>Variable.</dd>
</dl>
</section>
<section id="pub-static-attribs">
<h2><a href="#pub-static-attribs">Public static variables</a></h2>
<dl class="m-dox">
- <dt>static int <a href="#a37f97d663491ff54fda7f9cfc3080006" class="m-dox-self" name="a37f97d663491ff54fda7f9cfc3080006">Size</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ static int <a href="#a37f97d663491ff54fda7f9cfc3080006" class="m-dox-self" name="a37f97d663491ff54fda7f9cfc3080006">Size</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>A public static var.</dd>
</dl>
</section>
<section id="pub-attribs">
<h2><a href="#pub-attribs">Public variables</a></h2>
<dl class="m-dox">
- <dt>std::string <a href="#ad877084846b47e5504224c72aa49d399" class="m-dox-self" name="ad877084846b47e5504224c72aa49d399">debug</a></dt>
+ <dt>
+ std::string <a href="#ad877084846b47e5504224c72aa49d399" class="m-dox-self" name="ad877084846b47e5504224c72aa49d399">debug</a>
+ </dt>
<dd>A public variable.</dd>
</dl>
</section>
<section id="pro-static-attribs">
<h2><a href="#pro-static-attribs">Protected static variables</a></h2>
<dl class="m-dox">
- <dt>static bool <a href="#a74e37b7c91fdbbfb8b077f96ae5e6b2f" class="m-dox-self" name="a74e37b7c91fdbbfb8b077f96ae5e6b2f">False</a></dt>
+ <dt>
+ static bool <a href="#a74e37b7c91fdbbfb8b077f96ae5e6b2f" class="m-dox-self" name="a74e37b7c91fdbbfb8b077f96ae5e6b2f">False</a>
+ </dt>
<dd>A protected static var.</dd>
</dl>
</section>
<section id="pro-attribs">
<h2><a href="#pro-attribs">Protected variables</a></h2>
<dl class="m-dox">
- <dt>std::string <a href="#a7646ff8bc6f40c535eb3c281d969f8cd" class="m-dox-self" name="a7646ff8bc6f40c535eb3c281d969f8cd">logger</a></dt>
+ <dt>
+ std::string <a href="#a7646ff8bc6f40c535eb3c281d969f8cd" class="m-dox-self" name="a7646ff8bc6f40c535eb3c281d969f8cd">logger</a>
+ </dt>
<dd>A protected variable.</dd>
</dl>
</section>
using <a href="#a4a7ac6e39fedaf79a0ceb0f8d2a3cb64" class="m-dox-self" name="a4a7ac6e39fedaf79a0ceb0f8d2a3cb64">Main</a> = void <span class="m-label m-flat m-warning">protected</span>
</dt>
<dd>Protected alias in a group.</dd>
- <dt>void* <a href="#a347f08e1aec78ec16125bac4c2577962" class="m-dox-self" name="a347f08e1aec78ec16125bac4c2577962">variable</a> <span class="m-label m-flat m-warning">protected</span></dt>
+ <dt>
+ void* <a href="#a347f08e1aec78ec16125bac4c2577962" class="m-dox-self" name="a347f08e1aec78ec16125bac4c2577962">variable</a> <span class="m-label m-flat m-warning">protected</span>
+ </dt>
<dd>Protected variable in a group.</dd>
<dt>
<span class="m-dox-wrap-bumper">void <a href="#a829faa7cd38054a51a303027eaee3b31" class="m-dox-self" name="a829faa7cd38054a51a303027eaee3b31">foo</a>(</span><span class="m-dox-wrap">) const & <span class="m-label m-flat m-warning">protected</span></span>
using <a href="#a3ffd74e95952eacd75f04a2b85d61845" class="m-dox-self" name="a3ffd74e95952eacd75f04a2b85d61845">Float</a> = float
</dt>
<dd>An using declaration.</dd>
- <dt>const int <a href="#a7708bd7aaec399e771a2b30db52e4d22" class="m-dox-self" name="a7708bd7aaec399e771a2b30db52e4d22">Var</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ const int <a href="#a7708bd7aaec399e771a2b30db52e4d22" class="m-dox-self" name="a7708bd7aaec399e771a2b30db52e4d22">Var</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>A variable.</dd>
<dt>
<span class="m-dox-wrap-bumper">void <a href="#ac07863d69ae41a4e395b31f73b35fbcd" class="m-dox-self" name="ac07863d69ae41a4e395b31f73b35fbcd">foo</a>(</span><span class="m-dox-wrap">)</span>
<section id="var-members">
<h2><a href="#var-members">Variables</a></h2>
<dl class="m-dox">
- <dt>const int <a href="#acdc29819d61c01eed9c74242010a7601" class="m-dox-self" name="acdc29819d61c01eed9c74242010a7601">Var</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ const int <a href="#acdc29819d61c01eed9c74242010a7601" class="m-dox-self" name="acdc29819d61c01eed9c74242010a7601">Var</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>A variable.</dd>
</dl>
</section>
using <a href="#ad647ff34e255fa1b8adea19bfc55d631" class="m-dox-self" name="ad647ff34e255fa1b8adea19bfc55d631">Main</a> = void
</dt>
<dd>Alias in a group.</dd>
- <dt>void* <a href="#ac4c2505beb086a985a4154d00d41de70" class="m-dox-self" name="ac4c2505beb086a985a4154d00d41de70">variable</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ void* <a href="#ac4c2505beb086a985a4154d00d41de70" class="m-dox-self" name="ac4c2505beb086a985a4154d00d41de70">variable</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>Variable in a group.</dd>
<dt>
<span class="m-dox-wrap-bumper">void <a href="#a0daa434b0cb806e7613bcc06ed6baaf6" class="m-dox-self" name="a0daa434b0cb806e7613bcc06ed6baaf6">bar</a>(</span><span class="m-dox-wrap">)</span>
<section id="var-members">
<h2><a href="#var-members">Variables</a></h2>
<dl class="m-dox">
- <dt>int <a href="namespaceNamespace.html#ad3121960d8665ab045ca1bfa1480a86d" class="m-dox">Variable</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ int <a href="namespaceNamespace.html#ad3121960d8665ab045ca1bfa1480a86d" class="m-dox">Variable</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>A variable.</dd>
- <dt>int <a href="namespaceNamespace.html#aa8b31b63b2a5e71fe1734212a093bdc3" class="m-dox">VariableBrief</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ int <a href="namespaceNamespace.html#aa8b31b63b2a5e71fe1734212a093bdc3" class="m-dox">VariableBrief</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>Variable with just a brief.</dd>
- <dt>int <a href="#a7dc9e9cdaf8275ac8636d69b90f37045" class="m-dox">Variable</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ int <a href="#a7dc9e9cdaf8275ac8636d69b90f37045" class="m-dox">Variable</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>A variable.</dd>
- <dt>int <a href="#a39904e2093f37ccfc2b7ad44ead2420a" class="m-dox-self" name="a39904e2093f37ccfc2b7ad44ead2420a">VariableBrief</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ int <a href="#a39904e2093f37ccfc2b7ad44ead2420a" class="m-dox-self" name="a39904e2093f37ccfc2b7ad44ead2420a">VariableBrief</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>Variable with just a brief.</dd>
</dl>
</section>
<section id="var-members">
<h2><a href="#var-members">Variables</a></h2>
<dl class="m-dox">
- <dt>int <a href="#ad3121960d8665ab045ca1bfa1480a86d" class="m-dox">Variable</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ int <a href="#ad3121960d8665ab045ca1bfa1480a86d" class="m-dox">Variable</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>A variable.</dd>
- <dt>int <a href="#aa8b31b63b2a5e71fe1734212a093bdc3" class="m-dox-self" name="aa8b31b63b2a5e71fe1734212a093bdc3">VariableBrief</a> <span class="m-label m-flat m-primary">constexpr</span></dt>
+ <dt>
+ int <a href="#aa8b31b63b2a5e71fe1734212a093bdc3" class="m-dox-self" name="aa8b31b63b2a5e71fe1734212a093bdc3">VariableBrief</a> <span class="m-label m-flat m-primary">constexpr</span>
+ </dt>
<dd>Variable with just a brief.</dd>
</dl>
</section>
<section id="variables">
<h2><a href="#variables">Variables</a></h2>
<dl class="m-dox">
- <dt>int <a href="namespaceNS.html#a0bd189dc3154c8566a9e70f94b274c33" class="m-dox">var</a></dt>
+ <dt>
+ int <a href="namespaceNS.html#a0bd189dc3154c8566a9e70f94b274c33" class="m-dox">var</a>
+ </dt>
<dd>A variable.</dd>
</dl>
</section>
<section id="var-members">
<h2><a href="#var-members">Variables</a></h2>
<dl class="m-dox">
- <dt>int <a href="#ac2bb0fc1fabbeabad94c3b726bd708bc" class="m-dox-self" name="ac2bb0fc1fabbeabad94c3b726bd708bc">variable</a></dt>
+ <dt>
+ int <a href="#ac2bb0fc1fabbeabad94c3b726bd708bc" class="m-dox-self" name="ac2bb0fc1fabbeabad94c3b726bd708bc">variable</a>
+ </dt>
<dd>A variable.</dd>
</dl>
</section>
--- /dev/null
+INPUT = input.h
+AUTOLINK_SUPPORT = NO
+QUIET = YES
+GENERATE_HTML = NO
+GENERATE_LATEX = NO
+GENERATE_XML = YES
+XML_PROGRAMLISTING = NO
+
+##! M_PAGE_FINE_PRINT =
+##! M_THEME_COLOR =
+##! M_FAVICON =
+##! M_LINKS_NAVBAR1 =
+##! M_LINKS_NAVBAR2 =
+##! M_SEARCH_DISABLED = YES
--- /dev/null
+/** @brief A non-template class */
+struct Foo {
+ /** @brief Template variable without template docs */
+ template<class T> static T* variable;
+
+ /**
+ * @brief Template variable with template docs
+ * @tparam T Well, the type
+ */
+ template<class T> static T& another;
+};
+
+/** @brief Template class */
+template<class T> struct Bar {
+ /** @brief Template variable inside a template class without template docs */
+ template<class U> static Foo<U>* instance;
+
+ /**
+ * @brief Template variable inside a template class with template docs
+ * @tparam U Well, the type
+ */
+ template<class U> static Foo<U>& another;
+};
--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <title>Bar struct | My Project</title>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+ <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+ <div class="m-container">
+ <div class="m-row">
+ <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+ </div>
+ </div>
+</nav></header>
+<main><article>
+ <div class="m-container m-container-inflatable">
+ <div class="m-row">
+ <div class="m-col-l-10 m-push-l-1">
+ <h1>
+ <div class="m-dox-template">template<class T></div>
+ Bar <span class="m-thin">struct</span>
+ </h1>
+ <p>Template class.</p>
+ <div class="m-block m-default">
+ <h3>Contents</h3>
+ <ul>
+ <li>
+ Reference
+ <ul>
+ <li><a href="#pub-static-attribs">Public static variables</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ <section id="pub-static-attribs">
+ <h2><a href="#pub-static-attribs">Public static variables</a></h2>
+ <dl class="m-dox">
+ <dt>
+ <div class="m-dox-template">template<class U></div>
+ static <a href="structFoo.html" class="m-dox">Foo</a><U>* <a href="#acbbecef244b167c48ff22c97ee2d386b" class="m-dox-self" name="acbbecef244b167c48ff22c97ee2d386b">instance</a>
+ </dt>
+ <dd>Template variable inside a template class without template docs.</dd>
+ <dt>
+ <div class="m-dox-template">template<class U></div>
+ static <a href="structFoo.html" class="m-dox">Foo</a><U>& <a href="#a26d9727e8e3b4552618491f72fbc4143" class="m-dox">another</a>
+ </dt>
+ <dd>Template variable inside a template class with template docs.</dd>
+ </dl>
+ </section>
+ <section>
+ <h2>Variable documentation</h2>
+ <section class="m-dox-details" id="a26d9727e8e3b4552618491f72fbc4143"><div>
+ <h3>
+ <div class="m-dox-template">
+ template<class T>
+ template<class U>
+ </div>
+ static <a href="structFoo.html" class="m-dox">Foo</a><U>& Bar<T>::<wbr /><a href="#a26d9727e8e3b4552618491f72fbc4143" class="m-dox-self">another</a>
+ </h3>
+ <p>Template variable inside a template class with template docs.</p>
+ <table class="m-table m-fullwidth m-flat">
+ <thead>
+ <tr><th colspan="2">Template parameters</th></tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td style="width: 1%">U</td>
+ <td>Well, the type</td>
+ </tr>
+ </tbody>
+ </table>
+ </div></section>
+ </section>
+ </div>
+ </div>
+ </div>
+</article></main>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <title>Foo struct | My Project</title>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+ <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+ <div class="m-container">
+ <div class="m-row">
+ <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+ </div>
+ </div>
+</nav></header>
+<main><article>
+ <div class="m-container m-container-inflatable">
+ <div class="m-row">
+ <div class="m-col-l-10 m-push-l-1">
+ <h1>
+ Foo <span class="m-thin">struct</span>
+ </h1>
+ <p>A non-template class.</p>
+ <div class="m-block m-default">
+ <h3>Contents</h3>
+ <ul>
+ <li>
+ Reference
+ <ul>
+ <li><a href="#pub-static-attribs">Public static variables</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ <section id="pub-static-attribs">
+ <h2><a href="#pub-static-attribs">Public static variables</a></h2>
+ <dl class="m-dox">
+ <dt>
+ <div class="m-dox-template">template<class T></div>
+ static T* <a href="#a5610f0877922663122345b4ea6b987eb" class="m-dox-self" name="a5610f0877922663122345b4ea6b987eb">variable</a>
+ </dt>
+ <dd>Template variable without template docs.</dd>
+ <dt>
+ <div class="m-dox-template">template<class T></div>
+ static T& <a href="#afa3d6e8f346fdea749ed8a9f8b0bebcd" class="m-dox">another</a>
+ </dt>
+ <dd>Template variable with template docs.</dd>
+ </dl>
+ </section>
+ <section>
+ <h2>Variable documentation</h2>
+ <section class="m-dox-details" id="afa3d6e8f346fdea749ed8a9f8b0bebcd"><div>
+ <h3>
+ <div class="m-dox-template">
+ template<class T>
+ </div>
+ static T& Foo::<wbr /><a href="#afa3d6e8f346fdea749ed8a9f8b0bebcd" class="m-dox-self">another</a>
+ </h3>
+ <p>Template variable with template docs.</p>
+ <table class="m-table m-fullwidth m-flat">
+ <thead>
+ <tr><th colspan="2">Template parameters</th></tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td style="width: 1%">T</td>
+ <td>Well, the type</td>
+ </tr>
+ </tbody>
+ </table>
+ </div></section>
+ </section>
+ </div>
+ </div>
+ </div>
+</article></main>
+</body>
+</html>
def test(self):
self.run_dox2html5(wildcard='classClass.xml')
self.assertEqual(*self.actual_expected_contents('classClass.html'))
+
+class VariableTemplate(IntegrationTestCase):
+ def __init__(self, *args, **kwargs):
+ super().__init__(__file__, 'variable_template', *args, **kwargs)
+
+ def test(self):
+ self.run_dox2html5(wildcard='*.xml')
+ self.assertEqual(*self.actual_expected_contents('structFoo.html'))
+ self.assertEqual(*self.actual_expected_contents('structBar.html'))