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

            Bug ID: 91742
           Summary: User defined conversion references
           Product: gcc
           Version: 8.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: di...@franco-technologies.com
  Target Milestone: ---

The following code does not work as intended:

//----Example-----

#include <vector>
#include <cassert>

struct A
{
  operator const std::vector<int>&() const
  {
    return a_;
  }

  std::vector<int> a_;
};

int main()
{
  A a {};

  const auto& b1 {static_cast<const std::vector<int>&>(a)};
  const std::vector<int>& b2 {a};

  assert(&a.a_ == &b1);
  assert(&b1 == &b2);  // does not work with gcc 8.3.0 any standard
                       // works with gcc 7.1.0 with c++17 only                  
}

//----End of example-----

I read through the c++17 standard and did not find any information about this
behavior being implementation defined.

Diego

Reply via email to