[QUESTION] MSVC: INTERNAL COMPILER ERROR in combiation with boost::container and boost::movelib::unique_ptr
- 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.