$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Moore, Dave (dmoore_at_[hidden])
Date: 2002-04-10 08:20:51
Ok, my first reply to this had a braindead example (need coffee), but the
part of no code generation still held.
Below is a better example of the problem.
I have a simple minded workaround for MSVC, haven't given much thought to
what else might break, but how about adding an overloaded assignment
operator:
        shared_ptr & operator=(T *p)
        {
                this_type(p).swap(*this);
                return *this;
        }
Broken example, fixed by above workaround on MSVC6SP5
#include <boost/shared_ptr.hpp>
boost::shared_ptr<int> p_i;
int i=5;
int testa()
{
        i = 5;
        p_i = new int(i);		// No code generated!!?!?!
        *p_i = 0;
        return i;
}
int testb()
{
        boost::shared_ptr<int> _temp(new int(i));
        p_i = _temp;
        *p_i = 0;
        return i;
}
int main()
{
        testa();
        testb();
        return i;
}
> -----Original Message-----
> From: Markus Schöpflin [mailto:markus.schoepflin_at_[hidden]]
> Sent: Wednesday, April 10, 2002 8:25 AM
> To: boost_at_[hidden]
> Subject: [boost] Current shared_ptr and MSVC6SP5 is really dangerous
> 
> 
> Boosters,
> 
> the current implementation of shared_ptr allows the following
> program to compile with MSVC6SP5.
> 
> #include <boost/shared_ptr.hpp>
> boost::shared_ptr<int> p_i;
> int main()
> {
>   p_i = 42;
>   return 0;
> }
> 
> The line p_i = 42; generates no assembly instructions at all, it
> is simply ignored.
> 
> This is especially dangerous as the compiler belives this to be
> the same as p_i = new int(0) which also doesn't generate any
> assembly instructions.
> 
> I think this is a serious problem and should be addressed.
> 
> Markus
> 
> 
> _______________________________________________
> Unsubscribe & other changes: 
> http://listarchives.boost.org/mailman/listinfo.cgi/boost
>