boostorg / boostorg/boost

[QUESTION] MSVC: INTERNAL COMPILER ERROR in combiation with boost::container and boost::movelib::unique_ptr

Open
#1,149 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
HTML
Stars
8.6k
Forks
1.9k
Avg merge
39m
Merged PRs (30d)
2

Description

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](https://github.com/antonic901/xbmc4xbox-redux) 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` as return value of method will cause compiler error:
```
class 'boost::movelib::unique_ptr' : 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` 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](https://github.com/user-attachments/files/28927070/SkinTimer.cpp)
[SkinTimerManager.cpp](https://github.com/user-attachments/files/28927069/SkinTimerManager.cpp)

One of method which is failing is `CSkinTimerManager::TimerIsRunning`:
```
bool CSkinTimerManager::TimerIsRunning(const std::string& timer) const
{
boost::container::map >::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 :)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.