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