template関数とsizeof

仕事中に気付いたこと、その1。
template関数は、基本ヘッダファイルに宣言だけでなく定義も記載しないといけない。
なぜなら他のソースファイルから参照できなくなるから。

template関数hogeが、A.hとA.cppにそれぞれ宣言、定義があった時、
B.cppで、template関数の型を設定して使用していると、
ソースファイルはA.B別々にコンパイルされるため、B.objからはA.objのtemplate関数は、
型が異なるように見えるらしい。

ちなみにeffective C++にはさらっと書いてあった。ちゃんと読めということですね。


その2。
int a=100;
int b = sizeof(a);
上記の場合、bは4になる。int型が4バイトのため。
だったら普通にsizeof(int)とかにしろ、と思うが、変数名に意味を持たせて使用する場合には使える、のか。