Boost logo

Boost Users :

From: John Maddock (john_at_[hidden])
Date: 2005-11-04 05:35:04


> I 'm trying to put the implementation into a dll and mark the explicit
> instantiation of Normal as exported with the following results:
> 1) With the small_dim_ctor's enabled I get the static assertion when
> marked for export
> 2) With the small_dim_ctor's enabled everything is ok when not marked
> for export
> 3) With the small_dim_ctor's disabled everything is ok regardless of
> export marking
> 4) If I comment out the BOOST_STATIC_ASSERT and build my app with
> export enabled I can use the resulting dll without any problems
>
> I'm thinking that marking for export is somewhow generating an
> implicit conversion somewhere but I don't know how.

Unfortunately, when you explicitly instantiate a template every non-template
member function gets instantiated, and that triggers the static asserts.

The only workarounds I can see are:

1) Use regular asserts whenever the class is being exported rather than
static asserts.
2) Use partial template specialisations for the N = 1, 2 or 3 cases and give
them different constructors (no need to static asserts then).
3) Use template constructors instead:

    template <class U>
    explicit Vector( U x )
        {
        BOOST_STATIC_ASSERT(DIM==1);
        data_[0]=x;
        }

Hope this helps, John.


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