template

超スマートポインタのC++ラッパを書いた。もうちょっとテストしたら公開する予定。その途中で気付いたことがある。

  • テンプレートライブラリをLGPLにするのは危険だ。

何故かというとC++のテンプレートではライブラリのソースコードをユーザのソースコード内にコンパイル時に展開する。つまりマクロと同様に扱われることになる。ここで伝染条項が問題になる。LGPLには10行程度のマクロならば伝染しないとの例外規定があるのだが、10行に収まらないテンプレートにはこの例外規定が無効になる。要するにLGPLのテンプレートを利用するとユーザ側までLGPLに感染するのだ。
ちょっと調べてみたところ、有名なテンプレートライブラリでLGPLを使っているものは少ない。多くは修正BSD系のライセンスになっている。GPLLGPLのものだと新たに例外条項を追加して感染を防いだりしている。