У меня последняя версия компилятора VC++: «Microsoft Visual C++ 2010: 01019-532-2002102-70860»
Шаги для воспроизведения:
- Создайте пустой консольный проект win32
- Добавьте новый файл cpp с именем main.cpp
- Вставьте следующий код в main.cpp
- Компиляция
- Компилятор аварийно завершает работу и выдает следующее сообщение:
\bug\main.cpp(54893757): фатальный ошибка
C1001: Произошла внутренняя ошибка
в компиляторе. (файл компилятора
'msc1.cpp', строка 1420)
Чтобы обойти эту проблему, попробуйте
упростить или изменить программу
рядом с указанными выше местоположениями.
Выберите команду «Техническая поддержка
» в меню «Справка Visual C++»
или откройте файл справки «Техническая поддержка
» для получения дополнительной информации.
Эта ошибка произошла во внедренном тексте:
d:\bug\main.cpp(63) : см. ссылку на
создание экземпляра шаблона функции
'XDummy Test(T)' компилируется с использованием [
T=int ]
Сборка НЕ удалась.
Ниже исходный код main.cpp:
#include
template
struct trait_dummy
{
static const int value = std::tr1::is_convertible::value;
};
template
class X
{
public:
template
X(T_& rColl)
{}
};
template
X f(T_ rColl, std::false_type)
{
return X(rColl);
}
template
auto f(T_& rColl) -> decltype(f(rColl, std::false_type()))
{
return f(rColl, std::false_type());
}
template
X f(It_ first, size_t nSize, typename std::tr1::enable_if::type* dummy = 0)
{
return X(first, first + nSize);
}
class XTest
{
public:
void foo()
{
auto v = f(m_Suite);
}
std::vector m_Suite;
};
const int g_dummy = 0;
class XDummy
{
public:
XDummy(int, int, int, int dummy = g_dummy)
{}
};
template
XDummy Test(T)
{
return XDummy(0, 0, 0);
}
int main()
{
Test(0);
//XTest().foo();
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/429 ... imple-code