今天我的一个朋友告诉我,下面的代码编译以及他的Visual Studio 2008:Visual C++编译器允许从属名称作为没有“typename”的类型?
#include <vector>
struct A
{
static int const const_iterator = 100;
};
int i;
template <typename T>
void PrintAll(const T & obj)
{
T::const_iterator *i;
}
int main()
{
std::vector<int> v;
A a;
PrintAll(a);
PrintAll(v);
return 0;
}
我通常使用G ++,它总是拒绝通过第二PrintAll()调用。据我所知,对于这个问题,g ++正在做翻译模板的标准方式。
那么,我的知识是错误的,还是VS2008的扩展?
这是/ Za(严格)还是/ Ze(默认,扩展)? – MSalters 2010-06-04 15:23:22
@ MSalters:我刚刚尝试过/ ZA。没有看到任何区别... – hpsMouse 2010-06-04 15:56:04