VS 2012模板错误

VS 2012 template errors

本文关键字:错误 2012 VS      更新时间:2023-10-16

我已经用这段代码在C++/CLI中封送字符串一段时间了。最近我更新到VS 2012 RC来尝试一下。我真的很喜欢这个简单的设计,但我的包含clix.h的项目都无法编译。它在2010年运行得很好…可能有什么问题?谢谢你的回答!

以下是编译器输出:

  1. 警告C4346:'clix::detail::IsManagedString::Result'依赖名称为不是类型
  2. 错误C2988:无法识别的模板声明/定义
  3. 错误C2059:语法错误:"<"
  4. 错误C2039:"Result":不是"全局命名空间"的成员
  5. 错误C2143:语法错误:缺少";"在"}"之前

代码块错误位于:

typename detail::Select<detail::IsManagedString<SourceType>::Result>::Type<
typename detail::StringTypeSelecter<encoding>::Type,
System::String ^>::Result marshalString(SourceType string) {
// Pass on the call to our nifty template routines
return detail::StringMarshaler<
  detail::IsManagedString<SourceType>::Result ? detail::CxxFromNet : detail::NetFromCxx
>::marshal<encoding, SourceType>(string);
}

例如,源文件:

#include "clix.h"
int main()
{
}

可以在此链接上找到Clix头文件。

你本可以把这个问题发布在我的博客上,它没有被放弃或其他什么:)

我碰巧安装了Visual Studio 2012 RC并修复了该问题。您可以在链接的位置找到clix标头的新版本。

背景:微软的新编译器似乎对嵌套模板中的typedef有点挑剔,因为嵌套模板的父模板专门用于整数类型。无论如何,我找到了一种既适用于Visual C++2010又适用于Visual C++2012 RC的方法。