[LLVMbugs] [Bug 23906] New: clang compiles invalid multiple inheritance code
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Sat Jun 20 15:53:43 PDT 2015
https://llvm.org/bugs/show_bug.cgi?id=23906
Bug ID: 23906
Summary: clang compiles invalid multiple inheritance code
Product: clang
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: C++
Assignee: unassignedclangbugs at nondot.org
Reporter: ryan.burn at gmail.com
CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
Classification: Unclassified
This fails to compile with gcc and EDG but compiles with clang:
#include <type_traits>
#include <utility>
#include <cassert>
template <class Tag, class Value>
class Pack
{
public:
Pack(const Value& value) : _value(value) {}
Value value() const { return _value; }
private:
Value _value;
};
template<class Tag, class Value>
decltype(auto) unpack(Tag, Pack<Tag, Value>& pack) {
return pack.value();
}
struct tag1 {};
struct tag2 {};
struct A3 : Pack<tag1, int>, Pack<tag2, double> {
A3(int x, double y) : Pack<tag1, int>(x), Pack<tag2, double>(y) {}
};
int main() {
A3 a3(1, 2);
assert(unpack(tag1(), a3) == 1);
assert(unpack(tag2(), a3) == 2);
}
Per discussion on stackoverflow
http://stackoverflow.com/questions/30814981/will-this-template-function-correctly-match-a-class-with-multiple-bases
it looks like a compiler bug with clang
--
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/20150620/2a307edb/attachment.html>
More information about the llvm-bugs
mailing list