2007-01-01から1年間の記事一覧

浮動小数点定数

整定数式が必要なところで、浮動小数点を含む式が利用できる。 enum { digits10 = (int)(53*0.30103) }; また、静的定数メンバの宣言で、メンバが浮動小数点型であっても、クラス内で初期値を与えることが出来る。 struct foo { static const double pi = 3.…

複数行にわたる文字列

GCC 2.95では、文字列内部に改行を含めることができる。 const char* str = "foo ここも文字列内 bar";この機能は、GCCのCHILLフロントエンドで使われている。 文字列内に改行文字を含めたいという欲求は、少なからずあるようで、C++0xで可能になるかもしれ…

GNU MARST Ver 2.5 リリース

約5年ぶりの新版。 主な変更点は、ライセンスがGPLv2からGPLv3になったことか。 新機能はないの?

クラス名を重ねる

C++

コピペミスでクラス名を重ねてしまった。 以下、単純化したサンプル struct foo { static const int bar = 2; }; int main() { cout << foo::foo::bar << endl; return 0; } VCでは、エラーが出たが、GCCでは、警告も出ずに通ってしまった。 どうやら、valid…

ブロックの終端にラベル

C++では gcc2.95 以前、Cでは gcc3.3 以前では、ブロックの終端にラベルを置くことができる。 while(i) { if(i == 1) { i = 0; goto endblock; } printf("not reach\n"); endblock: } goto文のラベルだけでなく、switch文中のcase/defaultラベルも同様に書く…

配列new時にPOD型を初期化する。

struct POD { int data; }; new POD; // (1) new POD(); // (2) new POD[N]; // (3) new POD[N](); // (4) 標準C++は、POD型を配列new時に初期化する方法を提供していない。 しかし、GCCでは(4)の構文により、配列new時にPOD型の0初期化ができる。 標準C++で…

条件演算子のオーバーロード

GCC2.95では、条件演算子?:をオーバーロードできる。 class hoge; hoge operator?:(const hoge& cond, const hoge& texpr, const hoge& fexpr) { // 条件演算子の実装 } 条件演算子を定義する関数は、二つの引数をもつメンバ関数、三つの引数をもつ非メンバ…

非静的メンバに対するsizeof

非静的データメンバのバイト数をクラスのインスタンスを作らずに得ることができる。 class foo { public: int data; }; size_t size = sizeof(foo::data); この機能はGCC 2.95で利用できる。 というか、これって C++0x の新機能じゃねぇか。 http://www.open…

__TIMESTAMP__ マクロ

ファイルの最終更新日時を表す"Day Mmm dd hh:mm:ss yyyy"形式の文字列 gcc 4.2より利用できる。 VCのものと同じ Digital Mars Cにも同名のマクロがあるがこれはコンパイル日時を示す別物__INCLUDE_LEVEL__ マクロ インクルードのネストの深さを示す整定数 _…

__COUNTER__ マクロ

VCの __COUNTER__ と同じもの。 gcc 4.3より利用できる。 使用するごとに一つずつ増える0から始まる整定数に展開される。

情報流出

<警視庁資料>1万件がウィニーネットに流出 少年実名も Winnyの開発は違法なのに、使用は合法なの? 警察の考えは分からん。

日本語識別子

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より大き…

混ぜるな危険

C++

GCCやVCはメンバへのポインタをメンバにもつPOD型を正しくゼロ初期化してくれない。 #include <cassert> struct foo { int mem1; int foo::* mem2; }; int main() { foo x = {0}; assert(x.mem2 == foo().mem2); return 0; } 対応策 POD型の構造体のメンバにはCにない</cassert>…

2進定数

表題の通り2進数の整定数を書くための機能ですね。 int i = 0b10101011001; このGCC拡張は、GCCに詳しい人でもあまり知られていないんじゃないだろうか。 というのも、昨日、GCC 4.3系列の開発枝に入れられたばかりの新規の拡張機能である。http://gcc.gnu.o…

右辺値参照

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

本日のバグ

VC

昨日のバグの逆ヴァージョン発見。アクセス可能なはずのoperator deleteを呼び出せない。 #include <cstdlib> struct base { void* operator new(std::size_t n) { return std::malloc(n); } void operator delete(void* p) { std::free(p); } }; class deriv: base {</cstdlib>…

本日のバグ

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>…

音が出ない

ここ2ヶ月ほどパソコンから音が出なかった。 プラグが緩んでいるだけだった。 配線はきちんとしよう。

__iterator__による暗黙のループ

GCC ver 2系列には、__iterator__ というキーワードが追加されており、暗黙のループを作ることができた。 __itearator__ i = 5; a[i] = b[i]; これは、以下のコード片とほぼ同じ int i; for(i = 0; i < 5; ++i) a[i] = b[i]; このGCC拡張機能は、GCCの本家に…

version 1.34.0 リリース

これも近いうちにインストールしよう。

version 4.2.0 リリース

GCC

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

C++0x

C++

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2284.pdf 最新ドラフトが公開されている。 主な新機能は 可変個テンプレート テンプレートの別名 新しい文字型(char16_t, char32_t) あたりかな。 後で、じっくり読もう(英語苦手で詳しく読めない…

GMT

定訳は『グリニッジ平均時』らしい。 しかし、ネット検索では、『グリニッジ標準時』のほうが多くのページにヒットする。

車庫入れのときに、車こすった。OTL

録画できない

TV

突然、番組が録画できなくなる。 最新のWindows updateを一旦アンインストールして、再びWindows updateを実行する。 とりあえず、録画できるようになったみたいだけど、原因は不明。 半年程前に、TVが完全に壊れて以来、PCでしかテレビ番組が見られなくなっ…

ConceptGCC 4.3.0 alpha 6

C++

http://www.generic-programming.org/software/ConceptGCC/ ConceptGCCの新しいversionが出たみたい。 concept以外にもC++0xの面白そうな新機能がいっぱい実装されている。 Rvalue references Right angle brackets Default template arguments for function…

本日のバグ

以下のコードがVCでコンパイルできねぇ! #include <cstddef> struct A { int x,y; }; template <class X> struct C { int x :offsetof(X,y); }; int main() { C<A> x; } こんなコード書くなよ。>俺</a></class></cstddef>

任意の型、個数の引数を受け取るmax revison 2

C++

signedとunsignedを渡したときの動作を直感に合うようにしたり、 文字列や配列などを引数にできるようにするなど、いろいろ修正 struct gless { typedef bool result_type; template <typename T, typename U> bool operator() (const T&a, const U&b, typename boost::enable_if<is_signed<T> >::</is_signed<t></typename>…

template typedef

C++

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2112.pdf テンプレートの別名を付けるのは、typedefじゃなくて、usingを使うのね。 template <typename T> using Vec = vector<T>; using int32_t = int; // typedefの代わりにも使える。 別名は、型名じゃなくて</t></typename>…