在编译C ++模板代码时,如何在VC中设置更严格的编译规则

伙计们, 我希望VC在编译c ++模板代码时具有与GCC相同的严格编译规则。但我不知道如何在我的VC9.0(Visual Studio 2008)中设置它。 例如, GCC中不允许使用以下代码。
AutoPtr<RefCounted<Shape>> shape;
因为“&gt;&gt;”这里不允许,并且gcc请求在“&gt;&gt;”之间添加至少一个空格。
AutoPtr<  RefCounted<Shape>   > shape;
VC不会将此视为错误。根据我的理解,VC对模板代码编译有更宽松的限制。 如何在VC中添加更多限制以使其与GCC具有相同的规则?     
已邀请:
你没有。 :( MSVC ++只是错误地处理模板,你必须要小心。 请注意,您的特定示例实际上并不是C ++ 0x中的错误,因此MSVC2010实际上接受它是正确的。 (但是在很多其他事情上仍然存在问题,但是它会变得更好。) 您甚至可以“欺骗”并为您的gcc编译启用C ++ 0x以允许它;只是一定不要不小心使用C ++ 0x的东西MSVC2008(或MSVC2010!)不能支持。     
我不会把它称为错误 - C ++ 0x已经解除了这个限制,所以我会习惯它。更重要的是,Visual Studio非常乐意接受C ++ 03兼容的括号,并且之间有空格,所以我只是使用它而忘了它。没有办法改变Visual Studio的解析器不是标准中指定的这一事实,这是它不符合要求的最不重要的方式。     
您是否尝试过禁用特定于Microsoft的扩展程序?     
我恭敬地不同意GMan的声明:“MSVC ++只是错误地处理模板”。相反,我会说MSVC和GCC都错误地处理模板,每个都以自己的方式:) 要处理编译器细节,维护一组编译时测试模块是值得的。此外,现代构建系统(如bjam)可以配置为在项目编译后立即运行简短的单元测试。因此,您所要做的就是使用gcc工具集(和/或在非Windows平台上)不时地构建您的项目,以确保一切按预期工作。 PS。下选票不是我的:)     

要回复问题请先登录注册