Hi! I hope you won't mid if I ask here but I am having some issues with old version of boost. More precisly it is 1.57.0. In short, I am developer of XBMC 4.0 which is backport of modern Kodi to Original Xbox from 2001 using official XDK which is C++98. Since C++98 is missing lot of modern C++11 features I found that boost has lot of them and I am using them as replacement for stuff like smart pointers, lambdas, container algorithms etc.
Problem which I am facing is related to unique_ptr. Kodi is using lot of std::unique_ptr which ofcourse is not available in C++98, so as replacement I am using boost::movelib::unique_ptr. It's working fine as long as it is not used in std containers like vector, set or map. Because there is no concept of move in C++98, having std::map<std::string, boost::movelib::unique_ptr> as return value of method will cause compiler error:
class 'boost::movelib::unique_ptr<T>' : no copy constructor available or copy constructor is declared 'explicit'
I have read somewhere that using vector, map or set from boost::container should fix that. But unfortunately for me, when I use boost::container::map<std::string, boost::movelib::unique_ptr> I get INTERNAL COMPILER ERROR:
Compiling...
SkinTimerManager.cpp
lib\boost\boost\intrusive\bstree_algorithms.hpp(620) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 2701)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
However, I've found out using boost::unordered_map won't crash compiler. So I am wondering why and can I use that instead of normal map?
Here is source code of files:
SkinTimer.cpp
SkinTimerManager.cpp
One of method which is failing is CSkinTimerManager::TimerIsRunning:
bool CSkinTimerManager::TimerIsRunning(const std::string& timer) const
{
boost::container::map<std::string, boost::movelib::unique_ptr<CSkinTimer> >::const_iterator iter = m_timers.find(timer);
if (iter != m_timers.end())
{
return iter->second->IsRunning(); <-- this line failes
}
CLog::Log(LOGERROR, "Couldn't find Skin Timer with name: {}", timer);
return false;
}
And sorry again if this is not a place to ask for a help :)
Hi! I hope you won't mid if I ask here but I am having some issues with old version of boost. More precisly it is 1.57.0. In short, I am developer of XBMC 4.0 which is backport of modern Kodi to Original Xbox from 2001 using official XDK which is C++98. Since C++98 is missing lot of modern C++11 features I found that boost has lot of them and I am using them as replacement for stuff like smart pointers, lambdas, container algorithms etc.
Problem which I am facing is related to
unique_ptr. Kodi is using lot ofstd::unique_ptrwhich ofcourse is not available in C++98, so as replacement I am usingboost::movelib::unique_ptr. It's working fine as long as it is not used in std containers like vector, set or map. Because there is no concept of move in C++98, havingstd::map<std::string, boost::movelib::unique_ptr>as return value of method will cause compiler error:I have read somewhere that using vector, map or set from boost::container should fix that. But unfortunately for me, when I use
boost::container::map<std::string, boost::movelib::unique_ptr>I get INTERNAL COMPILER ERROR:However, I've found out using
boost::unordered_mapwon't crash compiler. So I am wondering why and can I use that instead of normal map?Here is source code of files:
SkinTimer.cpp
SkinTimerManager.cpp
One of method which is failing is
CSkinTimerManager::TimerIsRunning:And sorry again if this is not a place to ask for a help :)