Следующий фрагмент кода работает с Visual Studio 2008, но не с Visual Studio 2010.
template <typename TKey>
struct MyStruct
{
typedef std::map<TKey, int> Keys;
MyStruct()
{
}
void set(TKey& key)
{
#if 1
// This works with VS 2008 but not with 2010
keys_.insert(typename Keys::value_type(key, 1));
#else
// This works with VS 2008 and VS 2010
keys_.insert(std::pair<TKey, int>(key, 1));
#endif
};
private:
Keys keys_;
};
использование
typedef std::tr1::tuple<int, int> MyValueType;
MyStruct<MyValueType> a;
MyValueType x;
a.set(x);
Я получаю следующую ошибку:
Если заменить typedef std :: tr1 :: tuple MyValueType на typedef int MyValueType, это сработает.
Заранее спасибо.
Я думаю, что это ошибка, связанная с плохой реализацией семантики перемещения в MSVC 2010, поскольку вы можете успешно скомпилировать этот код:
typename
. Это всегда должно работать. - person Praetorian   schedule 22.10.2012