https://bugs.llvm.org/show_bug.cgi?id=42339

            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: unassignedclangb...@nondot.org
          Reporter: zhong...@pku.org.cn
                CC: blitzrak...@gmail.com, dgre...@apple.com,
                    erik.pilking...@gmail.com, llvm-bugs@lists.llvm.org,
                    richard-l...@metafoo.co.uk

My clang is 9.0.0, and the code is:

template < class TP1 >
class MainClass {
public:

 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. 

gcc:

<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

icc:

<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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to