
Hi Manfred,
Wouldn't that create multiple instances when including this header file more than one time?
If declared extern you ought to be fine.
extern const int pnm_image_type::_mono_asc;
Mhmm, the Windows compiler doesn't like that. This is what I tried in one of my header files. BTW, my lib is header only. struct pnm_image_type : property_base< uint32_t > { BOOST_STATIC_CONSTANT( type, _mono_asc = 1 ); // Monochrome ASCII encoding BOOST_STATIC_CONSTANT( type, _gray_asc = 2 ); // Gray level ASCII encoding BOOST_STATIC_CONSTANT( type, _color_asc = 3 ); // sRGB color ASCII encoding BOOST_STATIC_CONSTANT( type, _mono_bin = 4 ); // Monochrome binary encoding BOOST_STATIC_CONSTANT( type, _gray_bin = 5 ); // Gray level binary encoding BOOST_STATIC_CONSTANT( type, _color_bin = 6 ); // sRGB color binary encoding }; extern const int pnm_image_type::_mono_asc; extern const int pnm_image_type::_gray_asc; extern const int pnm_image_type::_color_asc; extern const int pnm_image_type::_mono_bin; extern const int pnm_image_type::_gray_bin; extern const int pnm_image_type::_color_bin; The error is: error C2720: 'boost::gil::pnm_image_type::_mono_asc' : 'extern ' storage-class specifier illegal on members error C2734: 'boost::gil::pnm_image_type::_mono_asc' : const object must be initialized if not extern [snip] Olivier Tournaire suggested to use boost::mpl like this: struct pnm_image_type : property_base< uint32_t > { typedef boost::mpl::integral_c<type,1> _mono_asc; typedef boost::mpl::integral_c<type,2> _gray_asc; typedef boost::mpl::integral_c<type,3> _color_asc; typedef boost::mpl::integral_c<type,4> _mono_bin; typedef boost::mpl::integral_c<type,5> _gray_bin; typedef boost::mpl::integral_c<type,6> _color_bin; }; This seems to work with my gcc and though I will go with this solution. All, I'm interested in is the value and not the actual class member or address to the member. Regards, Christian