I have the following code ( very simplified but compilable)
// =========== start snip ===============================
/// ======= in hpp ============
#include
template
class Vector
{
public:
Vector(void)
{/*init code omitted*/}
Vector(const Vector& v)
{/* ctor code omitted */}
//=====================================================
// some ctors for small DIM's
// will cause compile time errors if DIM != # of args
//=====================================================
#ifdef enable_small_dim_ctor
explicit Vector( T x )
{
BOOST_STATIC_ASSERT(DIM==1);
data_[0]=x;
}
Vector( T x, T y )
{
BOOST_STATIC_ASSERT(DIM==2);
data_[0]=x; data_[1]=y;
}
Vector( T x, T y, T z )
{
BOOST_STATIC_ASSERT(DIM==3);
data_[0]=x; data_[1]=y; data_[2]=z;
}
#endif
private:
T data_[DIM];
};
template <typename T>
class Vector3 : public Vector
{
public:
Vector3(){};
Vector3 Normal() const;
};
//==================== in cpp =================
// provide implementation of Normal
template <typename T>
Vector3<T> Vector3<T>::Normal() const
{
Vector3 n;
return n;
}
// explicit instantiation of the normal method
#ifdef try_export
// causes error STATIC_ASSERTION_FAILURE
template class __declspec(dllexport) Vector3<double>
Vector3<double>::Normal() const;
#else
//OK
template class Vector3<double> Vector3<double>::Normal() const;
#endif
// ============== end snip ===============================
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.
Using VStudio .Net 2003.
Any help is appreciated.
Thanks
Frank