From 000febb9994251b69128ef2dc22b63dc5b111412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20M=C3=BCller?= Date: Mon, 18 Nov 2019 17:10:22 +0100 Subject: [PATCH] Fix parsing of explicit template instantiation Fixes #82. --- src/libclang/class_parser.cpp | 5 ++++- test/cpp_class_template.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libclang/class_parser.cpp b/src/libclang/class_parser.cpp index 2825a16..5f76772 100644 --- a/src/libclang/class_parser.cpp +++ b/src/libclang/class_parser.cpp @@ -19,8 +19,11 @@ cpp_class_kind parse_class_kind(detail::cxtoken_stream& stream) kind = clang_getCursorKind(stream.cursor()); if (detail::skip_if(stream, "template")) + { // skip template parameters - detail::skip_brackets(stream); + if (!stream.done() && *stream.cur() == "<") + detail::skip_brackets(stream); + } detail::skip_if(stream, "friend"); diff --git a/test/cpp_class_template.cpp b/test/cpp_class_template.cpp index adb9ca1..bc119be 100644 --- a/test/cpp_class_template.cpp +++ b/test/cpp_class_template.cpp @@ -98,6 +98,11 @@ struct b<0, T> {}; /// template<> /// class a; extern template class a; + +// non-extern template as well +/// template<> +/// class a; +template class a; )"; cpp_entity_index idx; @@ -269,5 +274,5 @@ extern template class a; else REQUIRE(false); }); - REQUIRE(count == 5u); + REQUIRE(count == 6u); }