$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Daniel Krügler (dsp_at_[hidden])
Date: 2004-02-03 05:42:33
>>But I took it as honest as possible and searched for the definition(s)
>>of any of the definitions of those static "value" members declared in
>>any of the (macro hidden) AUX_WRAPPER_NAME classes. Regrettably I didn't
>>find any of these definitions in my 1.30.0 or in the last official
>>1.30.2 release. Can someone give me a pointer, where these definitions
>> can be found?
>
>
> I pointed you at the file above. Please use a CVS snapshot or the
> release candidate for the basis of your patch 1.30.x is very
> different.
Thanks for that hint, Dave. I took the last officially available files
and found one **further** MSVC7.1 bug concerning static data members -
sigh! (I posted the problems some minutes ago to the m.s.v.c. news group)
The following program causes a linker error using the /Za flag (disable
language extensions):
b.h: -------------------------
#ifndef B_H_INC
#define B_H_INC
template <typename T>
struct B
{
static const int val = 123;
};
template <typename T>
const int B<T>::val; // Definition provided, but not recognized...
#endif -------------------------
main.cpp --------------------
#include "b.h"
void foo(const int&)
{
}
int main()
{
typedef B<double> MyB;
foo(MyB::val);
}-------------------------
I could verify, that the same kind of linker error occurs for boost
sources, if a program accesses the address of constant static data
member of integral/enumeration type of any template class.
Currently I have not found any workaround for this, despite the
provocative proposal to add in the configuration file
/boost/config/compiler/visualc.hpp
the following lines:
#if (_MSC_VER <= 1310) && !defined(_MSC_EXTENSIONS)
# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
#endif
Can someone support or deny these awful observations???
Some further informations regarding my personal tests: The
corresponding data member definition is recognized, if the
in-class initialization is changed to an out-of-class initialization,
which obviously makes these kind of constants not suitable as part of
usual ICE's....
Daniel