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: unassignedclangb...@nondot.org
Reporter: ca...@carter.net
CC: blitzrak...@gmail.com, dgre...@apple.com,
erik.pilking...@gmail.com, llvm-bugs@lists.llvm.org,
richard-l...@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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs