というエラーが出ます。
func0とfunc1の引数の型は同じだと思うのですが、func0がエラーとなるのはなぜなのでしょうか?
#include <iostream>
using namespace std;
template <int Num0, int Num1, class T>
class A
{
public:
A() : num0(Num0), num1(Num1), val(T(1)/T(2))
{}
int num0;
int num1;
T val;
};
class Hoge
{
public:
enum { N = 3 };
// このクラスではT=double版のAをつかうのでラップする
template <int Num0, int Num1>
struct AType{
typedef A<Num0, Num1, double> Type;
};
template <int Num1>
void func0(const typename AType<N, Num1>::Type& a) // コンパイルエラー
{
cout << a.num0 << endl;
cout << a.num1 << endl;
cout << a.val << endl;
}
template <int Num1>
void func1(const A<N, Num1, double>& a) // わざわざdoubleを書きたくないが現状の回避策
{
cout << a.num0 << endl;
cout << a.num1 << endl;
cout << a.val << endl;
}
};
int main()
{
A<Hoge::N, 7, double> a;
Hoge hoge;
//hoge.func0(a); // コメントを外すとfunc0のコンパイルエラー
hoge.func1(a);
return 0;
}
vs++2008, 2010