diff --git a/src/libclang/class_parser.cpp b/src/libclang/class_parser.cpp index 9c5ec73..fde0a95 100644 --- a/src/libclang/class_parser.cpp +++ b/src/libclang/class_parser.cpp @@ -24,6 +24,10 @@ namespace detail::skip_if(stream, "friend"); + if (detail::skip_if(stream, "extern")) + // extern template + detail::skip(stream, "template"); + switch (kind) { case CXCursor_ClassDecl: diff --git a/test/cpp_class_template.cpp b/test/cpp_class_template.cpp index 427f4a9..ef39922 100644 --- a/test/cpp_class_template.cpp +++ b/test/cpp_class_template.cpp @@ -92,6 +92,12 @@ class a {}; /// }; template struct b<0, T> {}; + +// extern template for good measure +// currently not really supported but parsing must not fail +/// template<> +/// class a; +extern template class a; )"; cpp_entity_index idx; @@ -263,5 +269,5 @@ struct b<0, T> {}; else REQUIRE(false); }); - REQUIRE(count == 4u); + REQUIRE(count == 5u); }