[llvm-bugs] [Bug 42339] New: Redefined classes are allowed

via llvm-bugs llvm-bugs at lists.llvm.org
Wed Jun 19 22:26:06 PDT 2019


            Bug ID: 42339
           Summary: Redefined classes are allowed
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++
          Assignee: unassignedclangbugs at nondot.org
          Reporter: zhonghao at pku.org.cn
                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

My clang is 9.0.0, and the code is:

template < class TP1 >
class MainClass {

 class A;

 friend class B;

 A a;

 template < class TP2 > class B {};

 class A {

 template < class TP2 > friend class B;



int main(int argc, char *argv[]) {
 MainClass<int> var;

clang accepts the code, but other compilers reject it, since B is redefined. 


<source>: In instantiation of 'class MainClass<int>::A':

<source>:9:5:   required from 'class MainClass<int>'

<source>:22:18:   required from here

<source>:13:11: error: 'template<class TP2> class MainClass<int>::B' redeclared
as different kind of entity

   13 |   class A {

      |           ^

<source>:7:16: note: previous declaration 'class B'

    7 |   friend class B;

      |                ^

Compiler returned: 1


<source>(15): error: "B" has already been declared in the current scope

      template < class TP2 > friend class B;


          detected during:

            instantiation of class "MainClass<TP1>::A [with TP1=int]" at line 9

            instantiation of class "MainClass<TP1> [with TP1=int]" at line 22

compilation aborted for <source> (code 2)

Compiler returned: 2

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/20190620/0c07fe5b/attachment.html>

More information about the llvm-bugs mailing list