[LLVMbugs] [Bug 8292] New: Clang does not sufficiently check completely defined-ness of class template
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Mon Oct 4 06:36:17 PDT 2010
http://llvm.org/bugs/show_bug.cgi?id=8292
Summary: Clang does not sufficiently check completely
defined-ness of class template
Product: clang
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P
Component: C++
AssignedTo: unassignedclangbugs at nondot.org
ReportedBy: schaub-johannes at web.de
CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com
This template definition is rejected by comeau and GCC but not really by Clang
template <class T>
struct A
{
struct B { };
void f() { }
struct C {
int c[sizeof(A<int>::B)];
};
void g() { }
};
int main() {
A<int> b;
b.f();
b.g();
}
Clang does accept all the code up to until "b.g()" complaining that "g" was not
declared:
main1.cpp:18:5: error: no member named 'g' in 'A<int>'
b.g();
It appears to me that it causes an implicit instantiation of A<int> at
"sizeof(A<int>::B)" and instantiates declarations of A<int> for up to until
A::C, ignoring any data and function members declared past A::C.
I think this example is ill-formed already at "sizeof(A<int>::B)" by
[temp.inst]p6 "If an implicit instantiation of a class template specialization
is required and the template is declared but not defined, the program is
ill-formed.".
This also makes the second example of PR7308 which writes "friend
A<int>::operator A<double>();" ill-formed.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list