www.digitalmars.com         C & C++   DMDScript  

c++.beta - statics still break in 8.36

reply "nyra" <nyra sohu.com> writes:
Simplified source is here from CppUnit 1.8.0

class ClassType{
 ClassType(int name){}
};

int Name(){
 return 0;
}

#define CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(suiteName ) \
  static ClassType __autoRegisterSuite(suiteName)


CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(coreSuiteName());

---------------------------------------------------------------------
this also break:

ClassType some(coreSuiteName());

Those were legal in vc6 and bcc55
Sep 10 2003
parent reply "Walter" <walter digitalmars.com> writes:
Ok, but there are some errors in the code you posted, and I can't figure out
just what you meant. For example, what is Name() for? where's the definition
of coreSuiteName()?

"nyra" <nyra sohu.com> wrote in message
news:bjn97v$24p3$1 digitaldaemon.com...
 Simplified source is here from CppUnit 1.8.0

 class ClassType{
  ClassType(int name){}
 };

 int Name(){
  return 0;
 }

 #define CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(suiteName ) \
   static ClassType __autoRegisterSuite(suiteName)


 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(coreSuiteName());

 ---------------------------------------------------------------------
 this also break:

 ClassType some(coreSuiteName());

 Those were legal in vc6 and bcc55
Sep 10 2003
parent "nyra" <nyra sohu.com> writes:
sorry for my careless ! but forget that

the function  coreSuiteName() really is Name().

this problem is about template explicit instantiation and static variable
----------------------------------------------
template <class T>
class ClassType{
  ClassType(int name){}
};

int Name(){
  return 0;
}

static ClassType<int> some(Name()); //error-occured
----------------------------------------------

it seems ClassType<int> is not instanted before static variable some
defined!
compiler can't find the constructor of ClassType<int>(int name). but
when I use non-static defination, everything goes well.

ClassType<int> some(Name());

especially, if I put a non-static defination (or explicit template
instance )before static one, it compiled!

ClassType<int> some1(Name());
static ClassType<int> some2(Name());

OR

template ClassType<int>;
static ClassType<int> some(Name());


expecting this fixed.........

Sorry for my last letter again!
Sep 10 2003