[Bug c++/70983] New: False ambiguity on member function rvalue overload using auto

jackweston at live dot co.uk gcc-bugzilla@gcc.gnu.org
Fri May 6 14:52:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70983

            Bug ID: 70983
           Summary: False ambiguity on member function rvalue overload
                    using auto
           Product: gcc
           Version: 5.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jackweston at live dot co.uk
  Target Milestone: ---

In the following code, the call to Foo::GetString() works fine but the call to
Foo::GetStringAuto() is reported as ambiguous and fails to compile. The auto
should be deduced as `std::string` in both cases and the two situations should
be identical (and unambiguous).

--------------

#include <string>

class Foo
{
public:
    Foo(std::string string) : m_string(std::move(string)) {}

    std::string & GetString() & { return m_string; }
    std::string && GetString() && { return std::move(m_string); }

    auto & GetStringAuto() & { return m_string; }
    auto && GetStringAuto() && { return std::move(m_string); }

private:
    std::string m_string;
};

int main()
{
    Foo foo("blah");
    std::string fooStringA = foo.GetString();     // works
    std::string fooStringB = foo.GetStringAuto(); // call is ambiguous
    return 0;
}


More information about the Gcc-bugs mailing list