У меня проблема преобразования этого куска кода в г ++ от MSVC:Явная специализация шаблона в г ++, вызывая неприятность
#include <unordered_map>
class A
{
template <class T> class B;
template<>
class A::B<int>
{
};
std::unordered_map<int, long, B<int>> m_Map;
};
Sure вещи это не стандарт C++, в то время как VS еще это позволяет GCC (г ++) выдает ошибку «Явная специализация в области без пространства имен». Теперь я делаю это C++ совместимый следующие ссылки http://en.cppreference.com/w/cpp/language/template_specialization:
#include <unordered_map>
class A
{
template <class T> class B;
template <> class B<int>;
std::unordered_map<int, long, B<int>> m_Map;
};
template<>
class A::B<int>
{
std::size_t operator()(int const& n) const {
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
return 0;
}
Увы, теперь VS дает мне ошибку
Error 3 error C2079: 'std::_Hash_oper1<true,_Hasher>::_Hashobj' uses undefined class 'A::B<int>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\xhash
и
Error 2 error C2139: 'A::B<int>' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_empty' c:\program files (x86)\microsoft visual studio 12.0\vc\include\type_traits
Таким образом, неупорядоченная карта определенно не хочет работать с тем, что он считает «неопределенным классом». Даже несмотря на то, что я нападал, - заявил он. Кто-нибудь знает, что это такое? Спасибо.
Простое исправление было бы сделать класс 'B' не объявляется в' Ā' в первую очередь –
Спасибо , это работает, вы можете опубликовать в качестве ответа. – southerton