[Optional] Possible bug with VS2008

Hi, The following minimal test case does not compile with VS2008 (using Boost 1.55) #include <boost/optional.hpp> struct A { int T; }; int main() { boost::optional<A> a; } The error is, edited for clarity: boost\optional\optional.hpp(479) : error C2523: 'A::~T' : destructor tag mismatch boost\optional\optional.hpp(479) : while compiling class template member function 'void boost::optional_detail::optional_base<T>::destroy_impl(boost::optional_detail::optional_base<T>::is_not_reference_tag)' with [ T=A ] boost\optional\optional.hpp(500) : see reference to class template instantiation 'boost::optional_detail::optional_base<T>' being compiled with [ T=A ] main.cpp(8) : see reference to class template instantiation 'boost::optional<T>' being compiled with [ T=A ] After much head-scratching, I found out the culprit: the name of the integer member!! The compiler confuses the name of member 'T' with the name of the template parameter 'T' when trying to invoke its destructor... The offending code is void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->T::~T() ; m_initialized = false ; } Given that I cannot change struct A, is there a way to fix this? Is this a compiler bug or a Boost.Optional bug? Thanks in advance!
participants (1)
-
dariomt@gmail.com