STL源码解析中有这样的一段代码:
------------------------------------------------------------------------------------
#include <iostream>
using std::cout;
using std::endl;
struct B {};
struct D1:public B{};
struct D2:public D1{};
template <class I>
func(I& p, B)
{ cout<< "B version "<<endl; }
template <class I>
func(I& p, D2)
{ cout<< "D2 version "<<endl; }
template <class I>
func(I& p, D1)
{ cout<< "D1 version "<<endl; }
int main()
{
int *p;
func(p, B());
func(p, D1());
func(p, D2());
return 0;
}
可是用VS 2008 和 G++编译都出问题,都说D1,D2和B的作为func的形参不合法。
报错:
g++ 报错:
testTag.cpp:11:13: 错误:ISO C++ 不允许声明无类型的‘func’
testTag.cpp:15:14: 错误:ISO C++ 不允许声明无类型的‘func’
testTag.cpp:19:14: 错误:ISO C++ 不允许声明无类型的‘func’
VS 2008报错:
1>d:\workspaces\vs 2008\projects\practicekaa\practicekaa\tagtest.h(22) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
--------------------------------------------------------------------------------------
为什么不行呢?
摇曳的蔷薇
肥皂起泡泡
相关分类