Commit 9f477b87 authored by Dimitri van Heesch's avatar Dimitri van Heesch
Browse files

Bug 739214 - Cannot make unscoped link to C++ conversion operator

parent ad5dfc39
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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}?
@@ -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
+112 −0
Original line number Diff line number Diff line
<?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 −0
Original line number Diff line number Diff line
// 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;
};