No Such Blog or Diary
テンプレート関数の再宣言時のデフォルト値は標準ではない?
テンプレート関数のデフォルト引数を再宣言時に書くとg++でコンパイルがこける.例えば,下のプログラムのテンプレート関数funcは再宣言時(最初の宣言はプロトタイプ宣言で,関数の定義が再宣言)にデフォルト引数を入れているけど,g++は最初のプロトタイプ宣言にデフォルト引数がなかったのでfuncにはデフォルト引数がないと判断するらしい.結果としてmain関数内のfuncの呼び出しがこける.テンプレート関数でなくて普通の関数だと問題ないのでhogeの呼び出しは通る.少なくとも,g++ の 3.4.4, 4.2.3, 4.3.1, 4.3.2, 4.4.0 で同じ現象.
#include<iostream> using namespace std; template<typename B> void func(const B&, const char&, int k); template<typename B> void func(const B&, const char&, int k = 0) { cout << "func" << endl; } void hoge(const int&, const char&, int k); void hoge(const int&, const char&, int k = 0) { cout << "hoge" << endl; } int main(int argc, char *argv[]) { int n = 1; char m = 0; hoge(n,m); //ok func(n,m); //ng return 0; }
で,他のコンパオラで試したら以下のとおり.icc (Intel C Compiler 10.1.018) は warning #845: specifying a default argument when redeclaring an unreferenced function template is nonstandard と言って警告を出すが,コンパイルは通る.lc (Visual Studio .NET 2005 のコンパイラ) は何も言わずにコンパイルできる.bcc (Borland C++ 5.82) も何も言わずにコンパイル可能.
とりあえずgccどうにかしてほしい.
- Comments: 0
- TrackBack (Close): -
Ubuntu8.04のghc6のControl.Parallelはどこ?
ghc6.8.2がaptでインストールできるのだけどControl.Parallelの在り処が分からない.libghc6-parallel-dev とかいうパッケージがあるのが普通な気もするけど見当たらない.しょうがないのでaptで入れるのは諦めて自前で6.8.3をコンパイルしていれた.
でもquicksortが速くならない…
- Comments: 0
- TrackBack (Close): -
とりあえず
"libgomp.spec: No such file or directory" のエラーは 4.3.2 でも出たと.しょうがないので svn のリポジトリから最新版を落としてやったらエラーでなかった.はぁ.
- Comments: 0
- TrackBack (Close): -
autotoolsで四苦八苦
- 2008-08-05 (Tue)
- プログラミング
どれから始めたらいいのか分からない。aclocalが自動で検索してくれるディレクトリはどこ? とりあえず -I つけて明示しとけばいいの? automake --add-missing で -c つけなかったらシンボリックリンクになって別のマシンでこけたよ? スクリプトを生成した後はCLEANFILESに書いておかないとcleanで消してもらえないよ。そのスクリプトの元となるファイルもdist_XXXで書いておかないとmake distしてアーカイブにはいってくれないよ。それよりも make dist でMakefile.amとか.m4ファイルを入れない方法は無いのかな? dist-hookでこれらのファイルをアーカイブ前に消してもmakeで必要とされてしまって困るよ? あー、色々と面倒だ。
- Comments: 0
- TrackBack (Close): -
あーめんどっちー
- 2008-07-29 (Tue)
- プログラミング
trait がフィールド持てないのがこんなに面倒だったとは….フィールド持ったまま階層構造作りたいときには各階層のtraitに対応したobjectが必要になって… 定義が二度手間なきがする.
- Comments: 0
- TrackBack (Close): -
gawkでソート
- 2008-07-13 (Sun)
- プログラミング ( sed/wake/awk )
asort とかいう関数があるではないか.知らんかった.でも,比較関数を指定するにはどうしたらよいのやら?
- Comments: 0
- TrackBack (Close): -