SFINAE関係ねぇ〜

C++

C++テンプレートテクニック を少しずつ読んでいるがおかしな記述発見。 Chapter5 p109より 配列をbegin()に渡した場合、テンプレートのインスタンス化によってbegin()の戻り値の型であるtypename Containter;;iteratorへの置き換えに失敗します。このとき、…

リンゴジャム

リンゴジャムの瓶の側面、下の方に以下のような小さな突起がついているのを発見。・・・・・・ ・ ・・視覚障害者のために付けてあるようにも見える。 何を表しているんだろ?

PC復活

やっと修理が終わり、返ってきた。 HDも一応無事っぽい。よかった。よかった。

version 4.4.0リリース

GCC

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

パソコン壊れる

電源が入れた直後に落ちる。バックアップも取れね〜。 現在修理中。 古いMeマシンを引っ張り出してこれを書いている。 う〜、使いづらい。

JIS X 3001-1正誤表

1.7.2 × (4) ... 望まいい。 ○ (4) ... 望ましい。 7.1.2 7.2.1 表7.3 7.2.1.2 『べき乗ずる』という表現があるが、このような表現はこの規格以外では見たことがない。 『べき乗する』にするべき。 7.5.1.2 × ... かっこの構造型の実体に関するASSIGNMENT(=)…

C201xの最新ドラフトが出ている

C

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1362.pdf static_assert、uchar16_t、uchar32_t関係が追加されている。 ライブラリでは、at_quick_exit、quick_exitが追加されている。 浮動小数点関係も、何か修正があるみたいだけどよく分からない。

Version 1.8が出ている

とりあえず、ダウンロード。インストールは明日以降。C++関係の変更点 The C and C++ compilers now have diagnostics for meaningless comparision of 64-bit and bit-field operands. The C and C++ compilers now have conversion tables from CP=1250,12…

コンパイルできない。

C++

おや、VCってfor文の制御式で変数の宣言ができないのか。 class foo { public: foo(int){} operator bool() const { return false; } ~foo(){} }; int main() { for(;foo x=0;) ; return 0; } どうも、デストラクタをもっているとだめなようだ。誰かバグ報告…

複合代入演算子の等号の位置が逆

C

ときどきの雑記帖 i戦士篇 09/2/9より K&R以前の仕様なんて普通の人は知らないよなぁ。 大昔に一度だけ、この仕様ではまって以来、=の前後に空白を入れる癖がついてしまった。 あと噂で聞いたんだけど、初期化子で等号が必要なかったって本当なの? int x 3; …

funnyクラスを作ってみた。その2

C++

funnyの色々な使い方。 // メンバ関数を呼び出す。 template <class T,class U,class V,class W> class speak_type:public U { public: void speak() const { static_cast<const T*>(this)->data()->speak(); } struct interface { virtual void speak() const=0; }; }; class dog { public: void speak(</const></class>…

funnyクラスを作ってみた。その1

C++

boostのfunctionとanyを合わせたようなクラスを作ってみた。 対応コンパイラは、VCとGCCのみ。 variadic templatesの使用推奨。簡単な使用例。 #include <iostream> #include <cstdlib> #include "funny.h" int main() { funny<> x; x = 1; std::cout << (int)x << std::endl; x</cstdlib></iostream>…

friend宣言の仕方が分からない。

C++

VC、GCCの両者が受け付けるfriend宣言の仕方が分からない(T_T) template <class S, class T, template <class> class U> class baz { friend class U<S>::template bar<T>; // <== GCCはこれを受け付けてくれない。 template <class> friend class U<S>::bar; // こうするとVCが受け付けてくれない。 }; template <class S></class></s></class></t></s></class>…

依存名とtypename

C++

Faith and Brave - C++で遊ぼうより 規格準拠度が高いとされるComeauですら、この種のバグをもっているだよねぇ。 #include <iostream> struct foo_tag{}; struct bar_tag{}; struct foo { typedef foo_tag tag; }; struct bar { typedef bar_tag tag; }; template <class T>voi</class></iostream>…

現実と虚構の区別がつきません

首相に漢字テスト?! 参院予算委で石井・民主副代表 産経新聞 09/01/20 「読めて当然」 麻生総理、記者団に反撃 虚構新聞

制御式での変数の宣言

C++

if文やswitch文での制御式で変数を宣言するとき、()による初期化ができないことに今頃気づく。 if(int orz=3) // OK if(int orz(3)) // NG 規格が()による初期化を許していない理由が分からない。

排他的論理和 .XOR.

GCC version 3.4以前のGNU Fortran(g77)では、 排他的論理和を計算する.XOR.演算子が使用できる。 この拡張は、GCC 4.0で、Fortran フロントエンドの入替えに伴い自然消滅した。 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33432 一部で、復活してほしい…

配列の要素数を求めるのは意外と難しい

C++

C++で配列の要素数を求める方法は大きく分けて以下の二つの方法がよく知られている。 (a) #define SIZE(A) (sizeof(A)/sizeof(A[0])) (b) char (*sizehelper(T (&)[N]))[N] { return static_cast<char(*)[N]>(0); } #define SIZE(A) (sizeof(*sizehelper(A))) どちらの方</char(*)[n]>…

国際文字名

C++

C99 及び C++では、基本文字集合にない文字を、\uxxxx 又は \Uxxxxxxxxを使って表現できるが、 両者では、若干仕様が異なっている。 簡単なまとめ 識別子として使える文字の違い。 C++では、半角カナ、全角英文字が利用可。 ハングルの取り扱いが大きく異な…

C++0x最新 Working Draft 公開

C++

最新Draft N2798.pdf が公開された。 Concept導入により、ライブラリが、ほぼ総書換えになっている。まさか、ユーザー定義リテラルが規格に入るとは、思っていなかった。 これは、使いたくないなぁ。Attribute syntaxも入っているな。これ必要か? _Pragma()…

配列の要素アクセス

GCCでは、アドレスを取得できない配列に対しても、添字付けを行うことが出来る。 アドレスを取得できない配列には、以下の二つがある。 register修飾されているもの。 関数の戻り値である構造体のメンバであるもの。 この拡張は[]で要素アクセスする場合にの…

腹痛

17日に激しい腹痛と発熱に見舞われた。 寝返りを打つのも苦しかった。

無名クラスの入れ子クラス

C++

無名クラスの入れ子クラスを、関数テンプレートの引数にすると、Comeauでは、コンパイルできない。 どうやら、invalidなコードのようだ。 class { public: class bar{} baz; } foo; template <typename T> void hoge(const T&) {} int main(int argc, char *argv[]) { ho</typename>…

Visual studio 2008 SP1

VC

.NET Framework 3.5 SP1 がインストールエラーになる。(T_T) とりあえず、諦める。

Free Pascal Compiler

http://www.freepascal.org/ Version 2.2.2 がリリースされていたのでインストールしておく。 使う予定はないけど。

C++0xのraw string literal が名前に反して『raw』でない。

C++

バックスラッシュだらけにならずに正規表現が書けるのは一見便利だが、 『raw』でない部分があるのが気に入らない。 raw string literalの中でも以下の3点の変換が行われる。 行末のバックスラッシュによる行連結 トライグラフ ユニコードエスケープ これら…

歯痛

歯が痛ぇ〜よぉ。患部が腫れて、顔が変形している。 体全体が熱を持っている。さっき体温を測ったら38℃もある。 もうダメだ。

初心者のためのC++0x

C++

『C++0xは、初心者のための不可解なエラーメッセージを減らすための機能が追加されます。』 誰がこんなこと言い出したんだ? #include <vector> #include <bitset> using namespace std; int main() { vector<::bitset<0xe-1>> a; return 0; } 上記のコードは標準C++ではコンパイルできない(VC</::bitset<0xe-1></bitset></vector>…

コンパイル時多倍長演算ライブラリ

C++

誰か作っていないかな?ちょびっとだけ作ってみる。 const unsigned int BASE=100000; template <typename T, T V> struct value2type { typedef T type; static const type value=V; }; template<typename A, typename B, int LIM=-30> struct ADD { template <int J, bool = false> struct I { static const int value =( A::template I<J >:</j></int></typename></typename>…

Q&Aサイトにあった質問にここで密かに答える。

C++

http://okwave.jp/qa4126119.html template <typename T, T N> struct inttype { typedef T type; static const T value= N; }; template <std::size_t DIM> class Component { public: template <class ...ARGS> Component(ARGS... args) :Component(inttype<std::size_t, 0>(), args...){} template </std::size_t,></class></std::size_t></typename>