Skip to content

Commit

Permalink
Bug 739214 - Cannot make unscoped link to C++ conversion operator
Browse files Browse the repository at this point in the history
  • Loading branch information
Dimitri van Heesch committed Nov 16, 2014
1 parent ad5dfc3 commit 9f477b8
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/doctokenizer.l
Expand Up @@ -377,6 +377,7 @@ OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+
OPCAST {BLANK}+[^<(\r\n.,][^(\r\n.,]*
OPMASK ({BLANK}*{OPNORM}{FUNCARG})
OPMASKOPT ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
OPMASKOP2 ({BLANK}*{OPNORM}{FUNCARG2}?)|({OPCAST}{FUNCARG2})
LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
Expand All @@ -393,7 +394,8 @@ HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"
HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG2}?
REFWORD3 ({ID}":")*{ID}":"?
REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
REFWORD4 (({SCOPEPRE}*"operator"{OPMASKOP2})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOP2})){CVSPEC}?
REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}

%option noyywrap
%option yylineno
Expand Down
112 changes: 112 additions & 0 deletions testing/064/struct_foo.xml
@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
<compounddef id="struct_foo" kind="struct" language="C++" prot="public">
<compoundname>Foo</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
<definition>Foo::operator int</definition>
<argsstring>()</argsstring>
<name>operator int</name>
<briefdescription>
<para>Conversion to int. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="064_castoperator.cpp" line="22" column="1"/>
</memberdef>
<memberdef kind="function" id="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
<type/>
<definition>Foo::operator int</definition>
<argsstring>() const </argsstring>
<name>operator int</name>
<briefdescription>
<para>Conversion to int const. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="064_castoperator.cpp" line="24" column="1"/>
</memberdef>
</sectiondef>
<briefdescription>
<para><ref refid="struct_foo" kindref="compound">Foo</ref>. </para>
</briefdescription>
<detaileddescription>
<para>
<itemizedlist>
<listitem>
<para>No autolink for operator int()</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">operator int()</ref>
</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">title</ref>
</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">Foo::operator int()</ref>
</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">Foo::operator int()</ref>
</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">title</ref>
</para>
</listitem>
<listitem>
<para>No autolink for operator int() const</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">operator int() const</ref>
</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
</para>
</listitem>
<listitem>
<para>
<ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
</para>
</listitem>
</itemizedlist>
</para>
</detaileddescription>
<location file="064_castoperator.cpp" bodystart="20" bodyend="25"/>
<listofallmembers>
<member refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" prot="public" virt="non-virtual">
<scope>Foo</scope>
<name>operator int</name>
</member>
<member refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" virt="non-virtual">
<scope>Foo</scope>
<name>operator int</name>
</member>
</listofallmembers>
</compounddef>
</doxygen>
25 changes: 25 additions & 0 deletions testing/064_castoperator.cpp
@@ -0,0 +1,25 @@
// objective: test linking to the cast operator with and without const
// check: struct_foo.xml
/**
* @brief Foo
*
* - No autolink for operator int()
* - @ref operator int()
* - @ref operator int() "title"
* - Foo::operator int()
* - @ref Foo::operator int()
* - @ref Foo::operator int() "title"
*
* - No autolink for operator int() const
* - @ref operator int() const
* - @ref operator int() const "title"
* - Foo::operator int() const
* - @ref Foo::operator int() const
* - @ref Foo::operator int() const "title"
*/
struct Foo {
/** @brief Conversion to int */
operator int();
/** @brief Conversion to int const */
operator int() const;
};

0 comments on commit 9f477b8

Please sign in to comment.