08/09/10 17:21:59
templateを勉強し始めたのですがなぜエラーなのかわかりません。ご教授ください。
以下、該当ソースです。
typedef struct taghoge {
int val1;
union {
struct {
int val2_1_1;
int val2_1_2;
} val2_1;
struct {
long val2_2_1;
} val2_2;
} val2;
} hoge;
template <typename T> const char* func(T& temp) { return typeid(temp).name(); }
void main() {
hoge h;
printf("h = %s\n", func(h));
printf("h.val1 = %s\n", func(h.val1));
printf("h.val2 = %s\n", func(h.val2));
printf("h.val2.val2_1 = %s\n", func(h.val2.val2_1)); // 1: OK
printf("h.val2.val2_2 = %s\n", func(h.val2.val2_2)); // 2: NG
}
1の箇所はコンパイルも実行もできます。2の箇所はコンパイルできません。
エラーは「error C2664: 'func' : 1 番目の引数を '' から '&' に変換できません。」とでます。
なぜこのようなコンパイルエラーになるのでしょうか。
環境は VC++2005 ExpressEdition + SP1 です。