[C++-sig] Re: Attempted a typeid of NULL pointer!

Baptiste Lepilleur gaiacrtn at free.fr
Sat May 31 11:22:18 CEST 2003


I've run into the same issue yesterday. I'm using boost 1.30 with MSVC 6.

This problem arise when trying to obtain a default constructed shared_ptr in
python. It seems that the conversion of a null shared_ptr to None is not
handled. Though, I don't know if this feature is supported (the unit-test
for shared_ptr is too complicated for me to understand).


Here is the python code. It only fail when 'statement.elseStatement' is a
NULL shared_ptr.
    def visitIfStatement( self, statement ):
        self._visitScopedSubstatement( statement.thenStatement )

        if statement.elseStatement:        # C++ property which is a
shared_ptr
            self._visitScopedSubstatement( statement.elseStatement )
---
  File "C:\prg\vc\Rfta\src\pyrfta\test\rfta\codeanalysis.py", line 39, in
visitIfStatement
    if statement.elseStatement:
RuntimeError: Attempted a typeid of NULL pointer!
---

Notes that using explicit comparison against None also fail:
        if None != statement.elseStatement:


The IfStatement C++ class.

typedef boost::shared_ptr<Statement> StatementPtr;
typedef boost::shared_ptr<IfStatement> IfStatementPtr;

class RFTA_API IfStatement : public ConditionStatement
{
public:
// ...
   StatementPtr getElseStatement() const;

private:
    StatementPtr elseStatement_;
};

The code used to expose the IfStatement:
   class_<IfStatement, IfStatementPtr, bases<ConditionStatement>,
boost::noncopyable>( "IfStatement",

init<ExpressionPtr, StatementPtr>() )
     .def( init<ExpressionPtr, StatementPtr, StatementPtr>() )
// ...
     .add_property( "elseStatement", &IfStatement::getElseStatement,
                                     &IfStatement::setElseStatement )
     ;

Baptiste.

----- Original Message ----- 
From: "David Abrahams" <dave at boost-consulting.com>
To: <c++-sig at python.org>
Sent: Saturday, May 31, 2003 4:15 AM
Subject: [C++-sig] Re: Attempted a typeid of NULL pointer!


> "Marcelo A. Camelo" <camelo at esss.com.br> writes:
>
> > Hi!
> >
> > A simple one: I'm trying to wrap a function that returns
> > a shared_ptr of a wrapped type (this type has been wrapped
> > with shared_ptr as its held_type). Everything goes fine
> > as long as the shared_ptr holds a valid pointer. If its
> > value is NULL (which is a valid value within the wrapped
> > C++ context), it raises the following exception:
> >
> > RuntimeError: Attempted a typeid of NULL pointer!
> >
> > Shouldn't it return None?
>
> Boost Version?  CVS?  Code for reproducing the problem?
>
> -- 
> Dave Abrahams
> Boost Consulting
> www.boost-consulting.com





More information about the Cplusplus-sig mailing list