summaryrefslogtreecommitdiffstats
path: root/testing/070_ref_variadic_template.cpp
diff options
context:
space:
mode:
authorMatthew White <mehw.is.me@inventati.org>2017-07-24 08:02:35 (GMT)
committerMatthew White <mehw.is.me@inventati.org>2017-08-03 03:38:51 (GMT)
commit818f0458205a2965f0a676265e2454450a4c3455 (patch)
tree52f32c4887031f14b868957835e62701ad6586b1 /testing/070_ref_variadic_template.cpp
parentfce142b4282d80f16fff53ba1cbd2572119b17ef (diff)
downloadDoxygen-818f0458205a2965f0a676265e2454450a4c3455.zip
Doxygen-818f0458205a2965f0a676265e2454450a4c3455.tar.gz
Doxygen-818f0458205a2965f0a676265e2454450a4c3455.tar.bz2
Add variadic template function regression tests
* testing/069_link_variadic_template.cpp: new file, @link regression test for variadic template function * testing/069/069__link__variadic__template_8cpp.xml: new file, expected @link regression test result for variadic template function * testing/070_ref_variadic_template.cpp: new file, @ref regression test for variadic template function * testing/070/070__ref__variadic__template_8cpp.xml: new file, expected @ref regression test result for variadic template function At the time of writing, the part between <> is totally ignored: func<Args...>(Args... args) is interpreted as func(Args... args). Beware that a function parameter with either a & or * operator, e.g. 'const Args&... args', requires @link and @ref to use such parameter as verbatim, i.e. {@link func(const Args&... args)}. At the time of writing, the form {@link func(const Args&...)} will fail, unless the function parameter was declared just as 'const Args&...'.
Diffstat (limited to 'testing/070_ref_variadic_template.cpp')
-rw-r--r--testing/070_ref_variadic_template.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/testing/070_ref_variadic_template.cpp b/testing/070_ref_variadic_template.cpp
new file mode 100644
index 0000000..376cebe
--- /dev/null
+++ b/testing/070_ref_variadic_template.cpp
@@ -0,0 +1,95 @@
+// objective: test \ref command with a variadic template function
+// check: 070__ref__variadic__template_8cpp.xml
+
+/** \file
+ *
+ * @attention
+ * @parblock
+ * At the time of writing, the part between \<\> is totally ignored:
+ * %func<Args...>(Args... args) is interpreted as %func(Args... args).
+ *
+ * Beware that a function parameter with either a \& or \* operator,
+ * e.g. 'const Args&... args', requires \\link and \\ref to specify
+ * such parameter as verbatim, i.e. 'const Args&... args'. At the
+ * time of writing, the form %func(const Args&...) will fail, unless
+ * the function parameter was declared just as 'const Args&...'.
+ * @endparblock
+ *
+ * \ref Test::func(int,Args...)const "variadic template method"
+ *
+ * References to the variadic template function overloads:
+ * @li \ref func(int,Args&... args) "First overload"
+ * @li \ref func(int,Args&&... args) "Second overload"
+ * @li \ref func(int,const Args&... args) "Third overload"
+ * @li \ref func(int,const Args&&... args) "Fourth overload"
+ * @li \ref func(int,Args*... args) "Fifth overload"
+ * @li \ref func(int,Args**... args) "Sixth overload"
+ * @li \ref func(int,const Args*... args) "Seventh overload"
+ * @li \ref func(int,const Args**... args) "Eighth overload"
+ * @li \ref func(int,Args...) "Ninth overload"
+ *
+ * The followings are interpreted the same:
+ * @li \ref func(int,const Args&... args) "without template argument"
+ * @li \ref func<Args...>(int,const Args&... args) "with template argument"
+ *
+ * See the \ref Test "test" class.
+ */
+
+/** A function
+ */
+void func(int p);
+
+/** A variadic template function overload
+ */
+template <typename... Args>
+void func(int p, Args&... args);
+
+/** A variadic template function overload
+ */
+template <typename... Args>
+void func(int p, Args&&... args);
+
+/** A variadic template function overload
+ */
+template <typename... Args>
+void func(int p, const Args&... args);
+
+/** A variadic template function overload
+ */
+template <typename... Args>
+void func(int p, const Args&&... args);
+
+/** A variadic template function overload
+ */
+template <typename... Args>
+void func(int p, Args*... args);
+
+/** A variadic template function overload
+ */
+template <typename... Args>
+void func(int p, Args**... args);
+
+/** A variadic template function overload
+ */
+template <typename... Args>
+void func(int p, const Args*... args);
+
+/** A variadic template function overload
+ */
+template <typename... Args>
+void func(int p, const Args**... args);
+
+/** A variadic template function overload
+ */
+template <typename... Args>
+void func(int p, Args... args);
+
+/** A test */
+class Test
+{
+ public:
+ /** A variadic template method
+ */
+ template <typename... Args>
+ void func(int p, Args... args) const;
+};