[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