From 0875721452b09e39d9ca8065001dd71d22fd59a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20M=C3=BCller?= Date: Mon, 30 Oct 2017 22:25:12 +0100 Subject: [PATCH] Handle parsing of extern templates --- src/libclang/class_parser.cpp | 4 ++++ test/cpp_class_template.cpp | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) 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); }