还是模板缺省参数问题?
C++ primer中:
“类模板的后续声明可以为模板参数提供附加的缺省实参。正如函数参数的缺省实参的情形一样。在向左边的参数提供缺省实参之前,必须首先给最右边未初始化的参数提供缺省实参。”
于是写如下验证程序:
#include <iostream>
using namespace std;
template <class T, class C>
class foo{
public:
T a;
C b;
};
//后续声明提供附加的缺省实参(但是由于模板参数C还没有缺省实参,所以此处应该是错的)
template <class T = int, class C>
class foo;
int main(){
return 0;
}
正如我在程序中标注的,我认为程序应该错误,可是编译成功......(无论vs还是g++都试验过)
请问为什么?
附:vs更加过分,对于下面程序:
#include <iostream>
using namespace std;
template <class T, class C>
class foo{
public:
T a;
C b;
};
//后续声明提供附加的缺省实参(此处应该是正确的)
template <class T, class C = int>
class foo;
int main(int argc, char **argv){
foo<int> f; //编译失败
return 0;
}
这个本应该正确的程序在vs2003上却失败了(在g++上编译成功)。
郁闷......