[llvm-bugs] [Bug 44688] New: Bogus reference bindings incorrectly accepted

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Jan 27 15:59:01 PST 2020


https://bugs.llvm.org/show_bug.cgi?id=44688

            Bug ID: 44688
           Summary: Bogus reference bindings incorrectly accepted
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++
          Assignee: unassignedclangbugs at nondot.org
          Reporter: Casey at Carter.net
                CC: blitzrakete at gmail.com, dgregor at apple.com,
                    erik.pilkington at gmail.com, llvm-bugs at lists.llvm.org,
                    richard-llvm at metafoo.co.uk

Today's trunk and release/10.x accept the TU:

  struct ExplicitToInt {
    explicit operator int() const;
  };

  const int& x(ExplicitToInt{}); // #1
  int&& y(ExplicitToInt{});      // #2

despite that GCC, MSVC, and I agree that both reference bindings are
ill-formed. Running quickly through the bullets in [dcl.init.ref]/5:

* 5.1 doesn't apply: the initializer is not an lvalue

* 5.2 doesn't apply: neither target reference is an lvalue reference to
non-const-qualified or volatile-qualified type

* 5.3.1 doesn't apply: Neither int nor const int is reference-compatible with
ExplicitToInt

* 5.3.2: doesn't apply, ***assuming that "can be converted" means "can be
implicitly converted"***

* 5.4: doesn't apply because the explicit conversion operator cannot be
selected for "copy-initialization of an object of type "cv1 T1" [const int and
int for #1 and #2 respectively] by user-defined conversion".

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200127/e7b998d8/attachment.html>


More information about the llvm-bugs mailing list