This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/22354] New: g++ accepts specializiation without declaration


According to the C++ standard each member specialization has to be declared 
before use. G++ accepts usage without prior declaration, see the thread starting 
at http://gcc.gnu.org/ml/gcc-help/2005-07/msg00074.html for a discussion.

The code shown below is accepted by g++ 4.0 (and 3.3 and 3.4), however it should 
report an error as Comeau and icc does. It should require the declarations which 
are commented out.

struct A {
 const A* a;
};

template <const char* c> struct B {
 static const A b;
};

extern const char c[1]="";
extern const char d[1]="";

// Should be required, g++ does not need them
//template<> const A B<d>::b;
//template<> const A B<c>::b;

template<> const A B<c>::b ={&B<d>::b};
template<> const A B<d>::b ={&B<c>::b};

-- 
           Summary: g++ accepts specializiation without declaration
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: tneumann at pi3 dot informatik dot uni-mannheim dot de
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22354


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]