Hi ports@ ctags with "#84 C++11 new using semantics" patch from https://sourceforge.net/p/ctags/patches/84/
Kind regards, Rafael Index: Makefile =================================================================== RCS file: /cvs/ports/devel/ectags/Makefile,v retrieving revision 1.16 diff -u -p -u -p -r1.16 Makefile --- Makefile 6 Apr 2015 22:10:56 -0000 1.16 +++ Makefile 2 Jul 2016 17:31:22 -0000 @@ -3,6 +3,7 @@ COMMENT= multilanguage implementation of ctags DISTNAME= ctags-5.8 +REVISION= 0 PKGNAME= e${DISTNAME} CATEGORIES= devel HOMEPAGE= http://ctags.sourceforge.net/ Index: patches/patch-c_c =================================================================== RCS file: patches/patch-c_c diff -N patches/patch-c_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-c_c 2 Jul 2016 17:31:22 -0000 @@ -0,0 +1,56 @@ +$OpenBSD$ + +adding support for this new C++11 syntax: +using <Type> = <type definition>; + +https://sourceforge.net/p/ctags/patches/84/ + +--- c.c.orig Sun Jul 5 06:02:43 2009 ++++ c.c Sat Jul 2 19:29:15 2016 +@@ -130,6 +130,7 @@ typedef enum eTagScope { + SCOPE_EXTERN, /* external storage class */ + SCOPE_FRIEND, /* declares access only */ + SCOPE_TYPEDEF, /* scoping depends upon context */ ++ SCOPE_USING, /* scoping depends upon context */ + SCOPE_COUNT + } tagScope; + +@@ -1220,6 +1221,8 @@ static void qualifyFunctionDeclTag (const statementInf + qualifyFunctionTag (st, nameToken); + else if (st->scope == SCOPE_TYPEDEF) + makeTag (nameToken, st, TRUE, TAG_TYPEDEF); ++ else if (st->scope == SCOPE_USING && st->assignment) ++ makeTag (nameToken, st, TRUE, TAG_TYPEDEF); + else if (isValidTypeSpecifier (st->declaration) && ! isLanguage (Lang_csharp)) + makeTag (nameToken, st, TRUE, TAG_PROTOTYPE); + } +@@ -1269,6 +1272,8 @@ static void qualifyVariableTag (const statementInfo *c + ; + else if (st->scope == SCOPE_TYPEDEF) + makeTag (nameToken, st, TRUE, TAG_TYPEDEF); ++ else if (st->scope == SCOPE_USING && st->assignment) ++ makeTag (nameToken, st, TRUE, TAG_TYPEDEF); + else if (st->declaration == DECL_EVENT) + makeTag (nameToken, st, (boolean) (st->member.access == ACCESS_PRIVATE), + TAG_EVENT); +@@ -1757,7 +1762,10 @@ static void processToken (tokenInfo *const token, stat + case KEYWORD_THROWS: discardTypeList (token); break; + case KEYWORD_UNION: st->declaration = DECL_UNION; break; + case KEYWORD_UNSIGNED: st->declaration = DECL_BASE; break; +- case KEYWORD_USING: skipStatement (st); break; ++ case KEYWORD_USING: ++ reinitStatement (st, FALSE); ++ st->scope = SCOPE_USING; ++ break; + case KEYWORD_VOID: st->declaration = DECL_BASE; break; + case KEYWORD_VOLATILE: st->declaration = DECL_BASE; break; + case KEYWORD_VIRTUAL: st->implementation = IMP_VIRTUAL; break; +@@ -2323,7 +2331,7 @@ static void analyzeParens (statementInfo *const st) + st->gotArgs = TRUE; + setToken (st, TOKEN_ARGS); + advanceToken (st); +- if (st->scope != SCOPE_TYPEDEF) ++ if (st->scope != SCOPE_TYPEDEF && st->scope != SCOPE_USING) + analyzePostParens (st, &info); + } + else