[Bug c++/21510] New: Possible bug

sven at clio dot in-berlin dot de gcc-bugzilla@gcc.gnu.org
Wed May 11 10:28:00 GMT 2005


The following code contains a test template is_class which tries to determine, 
if the given argument is a class. Unlike other implementations it should not 
return true if the argument is a union. I have used the 'substitution failure 
is not an error' principle but g++ V3.3.5 (Debian 1:3.3.5-12) (i486-linux) 
fails with an error though it has a default function available. Since I do not 
have the standard I can't declare this a bug. 
 
---- bug.c 
 
cusing namespace std; 
 
#include <iostream> 
 
template<typename _T> 
struct is_class 
{ 
  typedef char no; 
  struct yes { char c[2]; }; 
  template<typename _U> 
  struct c: _U 
  { 
    c(int); 
  }; 
 
  template<typename _U> static no test (...); 
  template<typename _U> static yes test(c<_U>); 
 
  static const bool v = (sizeof (test<_T>(0))==sizeof(yes)); 
}; 
 
union u { int i; double f; }; 
struct c {}; 
 
int main (void) 
{ 
  cout << "union:" << is_class<u>::v << endl; 
  cout << "class:" << is_class<c>::v << endl; 
  cout << "int:" << is_class<int>::v << endl; 
 
  return 0; 
};

-- 
           Summary: Possible bug
           Product: gcc
           Version: 3.4.3
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: sven at clio dot in-berlin dot de
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i486-linux
  GCC host triplet: i486-linux
GCC target triplet: i486-linux


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



More information about the Gcc-bugs mailing list