};
// CHECK: <Declaration>template <typename T> struct D : A<T> {\n}</Declaration>
// CHECK: <Declaration>using A<T>::f</Declaration>
+
+struct Base {
+ int foo;
+};
+/**
+ * \brief
+*/
+template<typename T> struct E : Base {
+/**
+ * \brief
+*/
+ using Base::foo;
+};
+// CHECK: <Declaration>template <typename T> struct E : Base {\n}</Declaration>
+// CHECK: <Declaration>using Base::foo</Declaration>
+
+/// \tparam
+/// \param AAA Blah blah
+template<typename T>
+void func_template_1(T AAA);
+// CHECK: <Declaration>template <typename T> void func_template_1(T AAA)</Declaration>
+
+template<template<template<typename CCC> class DDD, class BBB> class AAA>
+void func_template_2();
+<Declaration>template <template <template <typename CCC> class DDD, class BBB> class AAA> void func_template_2()</Declaration>