Boost logo

Boost Users :

Subject: Re: [Boost-users] BOOST_STATIC_CONST
From: Manfred Doudar (manfred.doudar_at_[hidden])
Date: 2010-03-13 04:37:59


On Sat, 13 Mar 2010 09:43:18 +0100
Olivier Tournaire <olitour_at_[hidden]> wrote:

> Thank you Steven,
>
> 2010/3/13 Steven Watanabe <watanabesj_at_[hidden]>
>
> > AMDG
> >
> >
> > Olivier Tournaire wrote:
> >
> >> I am currently having problem with a static const class member (in
> >> a header
> >> only project):
> >>
> >> // type.hpp
> >> template< typename Property >
> >> struct property_base
> >> {
> >> typedef Property type;
> >> };
> >>
> >> struct some_type : property_base< uint32_t >
> >> {
> >> BOOST_STATIC_CONSTANT( type, first_value = 1 );
> >> BOOST_STATIC_CONSTANT( type, second_value = 2 );
> >> };
> >>
> >> // main.cpp
> >> #include "type.hpp"
> >> ...
> >> int main(int argc, char** argv)
> >> {
> >> BOOST_CHECK_EQUAL( 1 , some_type::first_value );
> >> }
> >>
> >> This produces a link error (g++ 4.3.4): undefined reference to
> >> some_type::first_value. Everything is fine with visual ...
> >>
> >> If I add const some_type::type some_type::first_value; after the
> >> struct definition, it compiles and links fine. However, would it
> >> produce a multiple
> >> definition link error in some cases?
> >> Could you please help?
> >>
> >>
> >
> > Putting the definition in a header can indeed cause a multiple
> > definition error. The definition needs to be in a cpp file.
> >
>
> Is there an other way to do that? I want the project to stay header
> only so I cannot introduce a cpp file.
> Are they some metaprogramming techniques that could lead to the same
> behavior?
>

Is "extern" what you are looking for?

  extern const some_type::type some_type::first_value;

Cheers,

-- 
Manfred

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net