templateに関して誰か教えて欲しいです

一つ目の質問

VisualC++のデバッガがinclusion-modelなので
http://d.hatena.ne.jp/programer_hoshimi/20090920#1253454147
にあるようにtemplateクラスのメンバ関数の定義をソースファイルに書く場合はソースファイルをincludeするか、templateをソースファイルに明示的に書くしか無い
、ということはわかったのですがgccコンパイラもinclusionモデルをとっているのかどうかということです。gccコンパイラでも上の二件のような回避方法をとってるんですかね???

二つ目の質問

標準ライブラリのstd::vectorの場合は勿論任意のクラスをtemplateに代入することが出来ますよね。(でないとvectorの意味がない)このstd::vectorの定義はどこでされているんですかね。ヘッダに定義されているのか、ソースに定義してソースファイルをincludeしているのか、VisualStudioの標準ライブラリでありながらVC以外でビルドして使っているのか、それともそのいずれでもないのか。

三つ目の質問

グローバルtemplate関数を作ることは可能なのか?
すなわち

//template.h
extern template<class Template> void func(Template t1);

みたいなことができるのかどうか。
少し前に試しにやってみたらコンパイル、通らなかったのですができてもおかしくない気がするんですよね。


このあたりはコンパイラの仕組みに強くないとなんでできてなんでできないのかが説明できない話でほしみの苦手分野です。一通りググッたのですが結局ほしみにはわかりませんでした。誰かご教授ください。