GCC

version 4.4.0リリース

GCC

やっと出たらしい。 しかし、PCがまだ帰ってこない。 インストールは当分先になりそうだ。

Version 4.3.1 リリース

GCC

近いうちにインストールする。

GCC version 4.3.0リリース

GCC

早いうちに、インストールしたい。

使ってみる。

冗談半分とはいえ、SWITCHマクロを作ってしまったので、使ってみる。 FizzBuzz問題 for(int i =1; i <= 100; ++i) { SWITCH(i) { DEFAULT std::cout << i; break; COND(_%3==0) std::cout << "Fizz"; CONTINUE; COND(_%5==0) std::cout << "Buzz"; CONTINUE;…

続・SWITCH

2007/11/6のSWITCHマクロを無意味に機能強化 これを使えば、誰でもスパゲティプログラムが書ける(書いてどうする)。 俺はプリプロセスを通した後のコードを読めねぇ。 変更点 複数の条件にマッチさせるためのマクロ CONTINUE を追加 優先順序付きの条件マク…

括弧で囲みたい。

括弧で囲みたいんだけど、なんかエラーが出る。GCCのバグっぽい。 再現できる最小のコード struct foo { int operator[](int) const { return 0; } }; int main() { (foo ()[0]); return 0; } 現在とっている回避法。 int main() { (0,foo ()[0]); // 現在使…

switchで文字列を使いたい

C++ではできないので、マクロを使ってでっち上げる。 namespace ns_switch { template<class C> const C* select(const char* str, const wchar_t* wcs) { return str; } template<> const wchar_t* select<wchar_t>(const char* str, const wchar_t* wcs) { return wcs; } tem</wchar_t></class>…

GCC version 4.2.2が出ている。

GCC

インストールしようとしたんだけど、途中でエラーが出る。 libtool: link: `del_op.lo' is not a valid libtool objectさぁ〜て、どうしたらよいんだかわかんねぇ。

テンプレートに依存する型名のusing宣言

少し前に、テンプレートに依存する型名のusing宣言の書き方が分からなくて、色々試していた。 template <class T> struct bar { typedef T type; }; template <class T> class foo:bar<T> { using typename bar<T>::type; // (1) やりたかったこと typedef typename bar<T>::type type; </t></t></t></class></class>…

decltype

GCCにdecltypeが実装された。 http://gcc.gnu.org/ml/gcc-patches/2007-07/msg01848.html http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2115.pdf typeofとの違いは参照に対する振る舞いの違いでいいんだっけ。 int i; int& j = i; decltype(j)…

日本語識別子

GCC

GCCで日本語の識別子を使いたいと思い、GCCのソースを適当にいじる。 --- libcpp/charset.c.orig +++ libcpp/charset.c @@ -80,5 +80,5 @@ Foundation, 51 Franklin Street, Fifth Fl #if HOST_CHARSET == HOST_CHARSET_ASCII -#define SOURCE_CHARSET "UTF-…

続・混ぜるな危険

GCC

昨日の続き 無事、Bugzillaに登録された。 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32245 ついでに報告した bit-field のバグ http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32244 http://gcc.gnu.org/ml/gcc-bugs/2007-06/msg00557.html intより大き…

右辺値参照

GCCの本流に右辺値参照の機能が追加された。 http://gcc.gnu.org/ml/gcc-patches/2007-05/msg02120.html めでたい。

本日のバグ

GCC

クラステンプレート内でusing宣言したときのアクセス制御ができない。 コンパイルできないはずの、以下のコードが通ってしまう。 struct base { void foo(){} }; template <class BASE> class deriv: BASE { using BASE::foo; }; int main() { deriv<base> x; x.foo(); return </base></class>…

version 4.2.0 リリース

GCC

あまり出来がよくないという情報があるが、近いうちにインストールしよう。

GCC version 4.0.4

GCC

4.0.x系が4.0.4になっている。忙しくてインストールする暇がない。 4.1.x系も4.1.2がRC1になっているし、インストールするのはおそらく、4月以降、 4.1系、4.2系の進展次第では、スルーするかもしれない。

ビットフィールドの型

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30328 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30332 ビットフィールドを使うと地雷踏みまくり。 最近、ビットフィールド関連のバグを合わせて五つほど報告。 ビットフィールドはバグを避けて使うのは難…

最適化しないとバグ

GCC C

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30313 static inline void bar(){} struct S { signed int i: 32; }; int main() { struct S x = {32}; sizeof(x.i+0); return 0; } このバグは今のところ、最適化しないときのみ発生している。 最適化のバグは…

ビットフィールド

多分大丈夫だと思ったけど通常使わないビットフィールドの使い方をしてみた。 予想に反し、GCCはバグっていた。http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30274 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30277回避策 なし。こんな間抜けな使い方す…

サイズ不明の配列へのポインタを引数に取る関数:定義編。

http://d.hatena.ne.jp/sulpsulpc/20061125では宣言する方法のみだったので、今回は定義する方法。 #include template struct P { typedef R func(A*); }; P>::func foo; template struct I { friend R foo(A* x) { X y= *x; std::cout ; template struct I,…

クラステンプレート内でのフレンド関数定義

ここを見て、日記を書いていられる方を見かけたのでちょっとだけ解説。 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19809で示されているサンプル #include template struct n{ friend void foo(){ std::cerr n1; n n2; n n3; foo(); } Reporterの方は、規…

本日のバグ

クラステンプレート内で、using宣言がうまく機能していない。http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30195回避策 using宣言を使わずに、明示的に限定するべし。 滅多に遭遇するバグじゃないし、問題になることはまず無いかな。

本日のバグ

http://gcc.gnu.org/bugzilla//show_bug.cgi?id=30144 重複だった。orz

サイズ不明の配列へのポインタを引数に取る関数。

題のような関数の宣言は、標準C++では禁止されているが、 現ヴァージョンのGCCでは、以下のような抜け道がある。 template struct bar { static void baz(X* x); }; extern "C" __typeof__(bar>::baz) foo; // 関数 void foo(int(*))の宣言 ただし、これがGC…

本日のバグ

いや、これを発見したのは今日じゃないんだが、 http://gcc.gnu.org/bugzilla//show_bug.cgi?id=29928 http://gcc.gnu.org/bugzilla//show_bug.cgi?id=29927GCCにバグレポートを提出したまではいいんだが、 後者のコードはどう解釈すればいいんだか、よくわ…

今日遭遇したバグ

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19809このバグはVCの以下のバグについて調査しているときに遭遇 template class foo { template friend void prod(const foo&); }; template void prod(const foo&s) { } int main() { foo x; prod(x); return …

昨日のバグの回避策

先頭に以下を追加 #define main(ARGC,ARGV) (main_)(ARGC, ARGV) int main(int argc, char *argv); int (main)(int argc, char *argv) { return main(argc, argv); }

g++のバグに遭遇

main関数をクラステンプレートのフレンドにできね〜。http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24449

C++0xを試す。

右辺値参照、static_assert、Right Angle Brackets、Delegating Constructors、 concept、可変個テンプレート引数を試せるGCCを作成。patchはこのあたり http://mndfck.org/~pedro.lamarao/projects/c++0x/ http://www.generic-programming.org/software/Con…

templateとtypeof

以下のように書くとコンパイルエラー template typeof(*(T*)0+*(U*)0) add(const T& x, const U& y) { return x+y; } http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11078回避策 template struct C { typedef typeof(*(T*)0+*(U*)0) type; };template typena…