Boost logo

Boost :

Subject: [boost] [Smart Pointers] compilation error with ver 1.44 and VC 9
From: Evonik Energy Services GmbH (tobias.loew_at_[hidden])
Date: 2010-08-24 03:00:56


after switching to version 1.44 my projects using make_shared won't compile anymore.
I'm using the VC 9 compiler on a Windows 2003 Server.
I'm confused that nobody else seems to have the same problem with make_shared, so here is a small example:



#include <boost/smart_ptr.hpp>
#include <boost/make_shared.hpp>

struct test {
    int i;

int main(int argc, char* argv[])
    boost::shared_ptr<test> spt = boost::make_shared<test>();
    return 0;


this compiles fine with Boost 1.43, but with version 1.44 I get the following error:

boost/detail/sp_typeinfo.hpp(77) : error C2440: 'Initialisierung': 'const char *' kann nicht in
'boost::detail::sp_typeinfo' konvertiert werden
(in english: 'const char *' cannot be converted to 'boost::detail::sp_typeinfo')

In version 1.43 the line in sp_typeinfo.hpp(77) was:

template<class T> sp_typeinfo sp_typeid_≤ T >::ti_( sp_typeid_≤ T >::name() );

so, the explicit-marked ctor was called.
In version 1.44 it changed to

template<class T> sp_typeinfo sp_typeid_≤ T >::ti_ = sp_typeid_≤ T >::name();

and the explicit-marked ctor won't be called anymore.

The change message
refers to some fix for Sun C++.
IMO the change should better be guarded by some compiler/platform-detection macro.


PS: I already posted this message on 18 Aug but accidentially as a reply to another thread.

Boost list run by bdawes at, gregod at, cpdaniel at, john at