Boost logo

Boost Users :

Subject: Re: [Boost-users] BOOST_STATIC_CONST
From: Olivier Tournaire (olitour_at_[hidden])
Date: 2010-03-13 13:58:00


2010/3/13 Manfred Doudar <manfred.doudar_at_[hidden]>

> 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?
>

Maybe. However, I am not sure. I still have to provide a definition of the
member somewhere. Where should I do this (in a header only project ...)?

>
> extern const some_type::type some_type::first_value;
>
>
> Cheers,
> --
> Manfred
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



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