STL の next_permutation を呼び出すだけの、簡単なソースのつもりなんですが、ideone の gcc-4.3.4 だとコンパイルエラーになってします。
http://ideone.com/BFoZ2
手持ちの環境で、mingw32 と、Solaris10 に付いてくる gcc ではコンパイルできて、実行もできます。
何が悪いのか、教えてください。
コンパイル可能な gcc のバージョンは以下の通りです。
■mingw32
d>gcc --version
2.95.2
■gcc @Solaris10
% gcc --version
gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# ネタとか、クイズじゃなくて、本当に何が悪いのか分かりません
自分も良く分かってないのですが「typename」を入れるとコンパイルが通るようです。
typename vector<T>::const_iterator i = v.begin();
http://ideone.com/lvBDZ
ちなみに、以下の環境でも、ideone と同様のエラーになるようでした。
VC++ はコンパイルできました。
<参考情報>
■ テンプレートの中でほかのテンプレートクラスのメンバ型を使う方法: typename や template の別の用法について - akihiko’s tech note
http://d.hatena.ne.jp/aki-yam/20100612/1276357023
おー。
た、確かに。
2012/02/02 07:56:59何ですか、この typename って。初めて見ました。
gcc 拡張? それとも、ちゃんとした予約語?
STL は勉強不足で、よく分かってないのですが、typename を付けるのが正しいっぽいです。VC++ だと typename 付けなくても型を解析してくれるようですけど。
ちなみに、Cygwin / g++ だと以下のメッセージでした。
2012/02/02 08:06:03