static decltype(auto) Get(XML_Serializer& arcSer)
{
return TDataConverter<TDataConverterAttribute>::Get(arcSer, DT_TypeDescriptor::Instance().GetAttribute<TVal, DT_DataConverterAttribute>());
};
typedef typename DT_TypeManipulation::RemoveReference<decltype(Get(*reinterpret_cast<XML_Serializer*>(NULL)))>::Result Type;
не работает в C ++ 14 (visual stdio 2017 / C ++ 17)
ошибка C3779: «XML_TDataConverterProvider :: Get»: функция, которая возвращает «decltype (auto)», не может быть использована до того, как она будет определена
template<class TVal>
class XML_TDataConverterProvider
{
private:
template<class TDataConverterAttribute>
struct TDataConverter
{
static auto Get(XML_Serializer& arcSer, TDataConverterAttribute apcDataConverterAttribute)
-> decltype(apcDataConverterAttribute->GetDataConverter())
{
ASSERT(apcDataConverterAttribute);
return apcDataConverterAttribute->GetDataConverter();
}
};
template<>
struct TDataConverter<DT_DataConverterAttribute const* const>
{
static DT_DataConverter& Get(XML_Serializer& arcSer, DT_DataConverterAttribute const* const apcDataConverterAttribute)
{
ASSERT(!apcDataConverterAttribute);
if (apcDataConverterAttribute) {}
return arcSer.mcConv;
}
};
typedef decltype(DT_TypeDescriptor::Instance().GetAttribute<TVal, DT_DataConverterAttribute>()) TDataConverterAttribute;
public:
static auto Get(XML_Serializer& arcSer)
-> decltype(TDataConverter<TDataConverterAttribute>::Get(arcSer, DT_TypeDescriptor::Instance().GetAttribute<TVal, DT_DataConverterAttribute>()))
{
return TDataConverter<TDataConverterAttribute>::Get(arcSer, DT_TypeDescriptor::Instance().GetAttribute<TVal, DT_DataConverterAttribute>());
};
typedef typename DT_TypeManipulation::RemoveReference<decltype(Get(*reinterpret_cast<XML_Serializer*>(NULL)))>::Result Type;
};
и это работает в Visual Studio 2012 / C ++ 11
Что нужно изменить в коде C ++ 11 для запуска этого кода?